我想問一下已知的現有Python 2.x庫是否用於解析帶有內置DTD的XML文檔而不是自動擴展實體。 (對於那些好奇的文件:JMdict。)Python:解析XML文檔,同時保留實體
看來lxml有一些不解析實體的選項,但最後我試過了,實體剛剛被轉換爲空白。我只是搜索了這個,發現pxdom是我可能嘗試的另一種選擇,但由於它是純Python,它似乎比我想要的慢得多。
還有什麼呢?
我想問一下已知的現有Python 2.x庫是否用於解析帶有內置DTD的XML文檔而不是自動擴展實體。 (對於那些好奇的文件:JMdict。)Python:解析XML文檔,同時保留實體
看來lxml有一些不解析實體的選項,但最後我試過了,實體剛剛被轉換爲空白。我只是搜索了這個,發現pxdom是我可能嘗試的另一種選擇,但由於它是純Python,它似乎比我想要的慢得多。
還有什麼呢?
看起來用例相當不正常;不擴展實體似乎違背瞭解析器通常應該按照XML規範工作的方式。
所以,我認爲這可能是最容易的。我已經通過re.finditer手動提取標籤,並創建了映射的字典。從這裏開始,它只是掃描分析後的輸出併爲我的應用程序做正確的事情。我覺得我的用例足夠好。
首先,BeautifulStoneSoup
從BeautifulSoup默認情況下不會擴展實體。
儘管您的用例可能不會很快或很高效,因爲它適用於不同類型的用法(處理各種形式不良和破碎的標記)。
雖然知道這很高興。謝謝。 – Vultaire 2010-08-22 05:41:55
lxml在問題中提到,它根據我的意思做了你想要的。測試代碼:
from lxml import etree
XML = """
<!DOCTYPE root [
<!ENTITY abc "123">
]>
<root>
&abc;
</root>"""
parser = etree.XMLParser(resolve_entities=False)
root = etree.fromstring(XML, parser)
print "Entity not resolved:"
print etree.tostring(root)
print
print "Entity resolved:"
root = etree.fromstring(XML)
print etree.tostring(root)
輸出:
Entity not resolved:
<root>
&abc;
</root>
Entity resolved:
<root>
123
</root>
我真的想用expat來解決這個問題,以避免依賴和重寫我的當前代碼。但是,是的,這確實解決了這個問題。 – boiko 2013-02-21 01:15:38
我想'xml.parsers.expat.XML_PARAM_ENTITY_PARSING_NEVER'的外籍人士會做到這一點,但它沒有任何效果。我想知道什麼是好事。 – boiko 2013-02-20 12:58:01