我使用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)(并注释了其他行),则不会找到任何内容。

为什么会这样呢?

谢谢。

最佳答案

这里的&apos;是XML文件中编码的一部分。

在XPath查询中,应使用:

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

关于python - lxml xpath如何处理xml实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53290232/

10-11 04:58