簡體   English   中英

lxml xpath 如何處理xml實體

[英]lxml xpath How to deal with xml entities

我使用 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>]

考慮使用最后一個 #4 選項轉義單個撇號:

item = root.xpath('.//item[@name="hi\'jk"]') # 4
item

# [<Element item at 0xbe25608>]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM