簡體   English   中英

使用lxml和xpath解析xml文件時如何保持&

[英]how to keep & when parsing an xml file using lxml and xpath

我試圖使用lxml和xpath指令從輸入的xml文件中提取一些信息,並將其打印到輸出文件中。 讀取類似以下內容的xml標記時出現問題

...
<editor> Barnes &amp; Nobel </editor>
...

為了解析xml文件並打印我使用的編輯器內容(xml中始終只有一個編輯器):

parser = etree.XMLParser(encoding='utf-8')
docTree = etree.parse( io.BytesIO(open(inputXML, "r").read()), parser )
print docTree.xpath('//editor')[0].text

我的問題是&amp; 在某個時候被轉換為'&' ,這弄亂了我的進一步處理。

我如何確保&amp; 符號不會被“解碼”嗎?

我知道這聽起來很冒昧,但是您希望數據為"&" 那就是XML元素的文本內容。 如果您以后需要將其處理為"&amp;" ,那么您需要執行將XML(或HTML)編碼回"&amp;"

您不能要求XML解析器解析您的文檔,並且不能將"&amp;" 進入"&" 它不會做。

我終於在“ 如何逃離XML中的“&”符號以便它們在HTML中呈現為實體)的答案中找到了自己的問題的答案 在我的代碼中,我添加了一個中間步驟,以確保所有&字符在輸出中保持不變。 這是

parser = etree.XMLParser(encoding='utf-8')
xmlText = open(inputXML, "r").read().replace("&amp;", "&amp;amp;")
docTree = etree.parse( io.BytesIO(xmlText), parser )
print docTree.xpath('//editor')[0].text

實際上,以防萬一,我已將相同的食譜應用於http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined%5Fentities%5Fin%5FXML中定義的XML中其他可能的實體

暫無
暫無

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

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