lxml xpath如何处理xml实体

时间:2018-11-13 22:07:27

标签: python xpath lxml

我使用lxml(Python 3.7.1)解析包含xml实体的xml文档。 我无法获得正确的语法来查询包含xml实体(&quot'等)的元素。
请参见以下代码:

from lxml import etree

root = etree.XML('''
<root>
    <item name="abcd">
        <ssitem att="efg"/>
    </item>
    <item name="hi&apos;jk">
        <ssitem att="lmn"/>
    </item>
</root>
''')

item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi&apos;jk']") # 2
# item = root.xpath(".//item[@name='hi'jk']") # 3
# item = root.xpath('.//item[@name="hi''jk"]') # 4
if len(item) != 0:
    print(len(item))
    print(item)
    name = item[0].xpath(".//@name")
    print(name)
else:
    print("Nothing")  

第1行未注释时,代码可以正常工作。

当第2行(或3或4)未注释(其他行已注释)时,什么也找不到。

为什么会这样?

谢谢。

2 个答案:

答案 0 :(得分:1)

此处&apos;是XML文件中编码的一部分。

在XPath查询中,您应该使用:

>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]

答案 1 :(得分:0)

考虑使用最后一个#4选项将单撇号转义:

changeRequest