在列表中连接值(XML,Python)

1 投票
1 回答
962 浏览
提问于 2025-04-16 09:05

我在处理XML文件时遇到了一些麻烦。我需要做的是把从XML中提取出来的一个列表的值连接起来。

<?xml version="1.0" encoding="UTF-8"?>
<locales>
<api-url>url</api-url>
<locale>
    <market>AE</market>
    <languages>
        <language>ar</language>
    </languages>
</locale>
<locale>
    <market>AM</market>
    <languages>
        <language>hy</language>
        <language>ru</language>
    </languages>
</locale>

我现在的做法是。

inputXml  = lxml.etree.parse('xml')

market = inputXml.xpath('//locale/market/text()')

Lang =  inputXml.xpath('//locale[i]/languages//language/text()')

我需要把市场和语言的值连接成这样 --> AE_ar, AM_hy, AM_ru

我试过用for循环,但没有成功。我得到的结果是 AE_ar,AE_ar,AE_ar, AM_hy,AM_hy,AM_hy。有没有其他方法,比如用XSLT或者其他什么方式在Python中实现这个?

1 个回答

5
import lxml.etree as ET
import io

content='''\
<?xml version="1.0" encoding="UTF-8"?>
<locales>
<api-url>url</api-url>
<locale>
    <market>AE</market>
    <languages>
        <language>ar</language>
    </languages>
</locale>
<locale>
    <market>AM</market>
    <languages>
        <language>hy</language>
        <language>ru</language>
    </languages>
</locale>
</locales>
'''
inputXml=ET.parse(io.BytesIO(content))

for locale in inputXml.xpath('//locale'):
    market = locale.xpath('market/text()')[0]
    for lang in locale.xpath('languages/language/text()'):
        print('{m}_{l}'.format(m=market,l=lang))
AE_ar
AM_hy
AM_ru

产生

撰写回答