lxml xpath 如何处理xml实体

我使用 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 行)被取消注释(并且其他行被注释)时,什么也找不到。


为什么会这样?


精慕HU
浏览 155回答 2
2回答

烙印99

这&apos;是XML 文件中编码的一部分。在 XPath 查询中,您应该使用:>>> root.xpath(""".//item[@name="hi'jk"]""")[<Element item at 0x7f91b2b9ae88>]

明月笑刀无情

考虑使用最后一个 #4 选项转义单个撇号:item = root.xpath('.//item[@name="hi\'jk"]') # 4item# [<Element item at 0xbe25608>]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python