Python -lxml xpath返回空列表

shan

我正在读取xliff文件,并计划检索特定元素。我尝试使用打印所有元素

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>

我想获取segment的值及其对应的来源

z

此代码,

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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章