簡體   English   中英

如何處理 XML 解析器的編碼?

[英]How to handle the encoding of the XML parser?

我嘗試對 XML 文件進行編碼,以便它可以毫無問題地讀取無效內容,但是它不起作用。

這是我的代碼:

import xml.etree.ElementTree as ET
import io

file_path = r'c:\data\MSM\Energy\XML-files\my_xml.xml' 

with io.open(file_path, 'r', encoding='utf-8-sig') as f:
    contents = f.read()
    tree = ET.fromstring(contents)

這是我收到的:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 62, column 48

這是 XML 文件第 62 行的樣子:

62    <Organisation>Blue & Logistics B.V.</Organisation>

我確定它與&符號有關,那么我該如何編碼呢?

加載 xml 作為文本替換&並使用 xml 解析器

import xml.etree.ElementTree as ET

with open('x.xml') as f:
  xml = f.read()
  xml = xml.replace("&", "&#38;")
  root = ET.fromstring(xml)
  print(root)

xml文件

<r>
  <Organisation>Blue & Logistics B.V.</Organisation>
</r>

輸出

<Element 'r' at 0x7f431e86bc70>

首先,它與編碼無關。 只是您的文件不包含格式良好的 XML。 找出創建它的方式、地點和時間,並修復創建它的過程。 內容中的&需要轉義,通常為&amp; .

除非萬不得已,否則不要嘗試修復錯誤的 XML - 您很可能會使事情變得更糟,尤其是當您必須處理來自同一個不可靠來源的多個輸入文檔時。

暫無
暫無

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

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