Python -lxml xpath 返回空列表



我正在读取一个xliff文件并计划检索特定元素。我尝试使用

from lxml import etree
with open('pathtofile.xliff', 'r',encoding = 'utf-8') as xml_file:
tree = etree.parse(xml_file)
root = tree.getroot()
for element in root.iter():
print("child", element)

输出为

child <Element {urn:oasis:names:tc:xliff:document:2.0}segment at 0x6b8f9c8>
child <Element {urn:oasis:names:tc:xliff:document:2.0}source at 0x6b8f908>

当我尝试获取特定元素时(借助此处的许多帖子( - 源标签

segment = tree.xpath('{urn:oasis:names:tc:xliff:document:2.0}segment')
print(segment)

它返回一个空列表。有人可以告诉我如何正确检索它。

输入:

<?xml version='1.0' encoding='UTF-8'?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0">
<segment id = 1>
<source>
Hello world
</source>
</segment>
<segment id = 2 >
<source>
2nd statement
</source>
</segment>
</xliff>

我想获取段的值及其相应的来源

这段代码,

tree.xpath('{urn:oasis:names:tc:xliff:document:2.0}segment')

不被 lxml 接受("lxml.etree.XPathEvalError: 无效表达式"(。您需要使用findall().

以下工作(在 XML 示例中,segment元素是xliff的子元素(:

from lxml import etree
tree = etree.parse("test.xliff")   # XML in the question; ill-formed attributes corrected
segment = tree.findall('{urn:oasis:names:tc:xliff:document:2.0}segment')
print(segment)

然而,真正的XML显然更复杂(segment不是xliff的直接子级(。然后,您需要添加.//来搜索整个树:

segment = tree.findall('.//{urn:oasis:names:tc:xliff:document:2.0}segment')

最新更新