簡體   English   中英

如何解析包含HTML實體的XML?

[英]How do I parse XML that contains HTML entities?

我有一個將XML作為字符串並嘗試使用xml解析的腳本

這是我正在使用的代碼的示例

from xml.etree.ElementTree import fromstring
my_xml = """
    <documents>
          <record>Hello< &O >World</record>
    </documents>
"""
xml = fromstring(my_xml)

當我運行代碼時,我得到一個ParseError

Traceback (most recent call last):
  File "C:/Code/Python/xml_convert.py", line 7, in <module>
    xml = fromstring(my_xml)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1300, in XML
    parser.feed(text)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1642, in feed
    self._raiseerror(v)
  File "C:\Python27\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 3, column 18

XML中的無效字符所述,這是由於具有HTML實體<>&

我該如何處理這些實體,以便XML將它們讀取為純文本?

您可以將lxml Parser與lxml recover=True標志一起使用:

In [25]: import lxml.etree as ET

In [26]: from lxml.etree import XMLParser

In [27]: my_xml = """
   ....:     <documents>
   ....:           <record>Hello< &O >World</record>
   ....:     </documents>
   ....: """

In [28]: parser = XMLParser(recover=True)

In [29]: element = ET.fromstring(my_xml, parser=parser)

In [30]: for text in element.itertext():
   ....:     print(text)
   ....:     


Hello  >World

你不能做你所要的。 您的文檔不是格式正確的XML,任何兼容的XML解析器都會拒絕它。

您可以編寫使用正則表達式對其進行修復並將其制成XML的代碼,但是任何此類解決方案幾乎都肯定會出現錯誤和易出錯,並且會引起比其解決的問題更多的問題。

如果您真的不能從源頭上解決此問題,那么文檔格式正確,那么最好的選擇可能是利用人的智能手動修復它們。

暫無
暫無

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

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