Python -lxml xpath返回空列表
问题描述:
我正在读取xliff文件并计划检索特定元素。我试着用打印的所有元素Python -lxml xpath返回空列表
from lxml import etree
with open('path\to\file\.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')
''{瓮:绿洲:名称:TC:XLIFF:文件:2.0} segment''不是'XPath'表达 – Andersson
@Andersson:尝试tree.findall('{urn:oasis:names:tc:xliff:document:2.0} segment') - 仍然返回一个空的列表 – shan
分享HTML源代码示例和所需的输出 – Andersson