我使用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)未注释(其他行已注释)时,什么也找不到。
为什么会这样?
谢谢。
答案 0 :(得分:1)
此处'
是XML文件中编码的一部分。
在XPath查询中,您应该使用:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
答案 1 :(得分:0)
考虑使用最后一个#4选项将单撇号转义:
changeRequest