lxml xpath如何处理xml实体
lxml xpath How to deal with xml entities
我使用 lxml (Python 3.7.1) 来解析包含 xml 个实体的 xml 文档。
我无法获得正确的语法来查询包含 xml 个实体("
、'
等)的元素。
见以下代码:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'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)行取消注释(并且其他行被注释)时,找不到任何内容。
为什么会这样?
谢谢。
此处'
是XML文件中编码的一部分。
在 XPath 查询中,您应该使用:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
考虑使用最后一个 #4 选项转义单撇号:
item = root.xpath('.//item[@name="hi\'jk"]') # 4
item
# [<Element item at 0xbe25608>]
我使用 lxml (Python 3.7.1) 来解析包含 xml 个实体的 xml 文档。
我无法获得正确的语法来查询包含 xml 个实体("
、'
等)的元素。
见以下代码:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'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)行取消注释(并且其他行被注释)时,找不到任何内容。
为什么会这样?
谢谢。
此处'
是XML文件中编码的一部分。
在 XPath 查询中,您应该使用:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
考虑使用最后一个 #4 选项转义单撇号:
item = root.xpath('.//item[@name="hi\'jk"]') # 4
item
# [<Element item at 0xbe25608>]