Python-lxmlxpath返回空列表

Python-lxmlxpath返回空列表,python,xml,xpath,lxml,Python,Xml,Xpath,Lxml,我正在读取一个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) 输出

我正在读取一个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>
它返回一个空列表。有人能告诉我如何正确地取回它吗

输入:

<?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.xpathevaleror:无效表达式”)。您需要使用
findall()

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

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

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

“{urn:oasis:names:tc:xliff:document:2.0}段”
不是
XPath
expression@Andersson:trusted tree.findall(“{urn:oasis:names:tc:xliff:document:2.0}段”)-仍然返回空的listShare HTML源示例和所需的output@Andersson:已添加源。请告诉我如何获得所有段和源标记的值。@mzjn:好的。我会试试的!
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)
segment = tree.findall('.//{urn:oasis:names:tc:xliff:document:2.0}segment')