簡體   English   中英

如何用xml.dom.minidom解析具有'%$#* ^'這樣的字符的xml文件?

[英]how to parse xml file with xml.dom.minidom which has characters like '%$#*^'?

我創建了python腳本,該腳本使用xml.dom.minidom解析xml(以下給出的格式)。 然后將電子郵件警報發送到xml文件中定義的電子郵件ID以及xml中定義的其他數據(例如主題,頁面等)。當主題包含“&#@%*”等字符時,出現錯誤“ xml.parsers.expat .ExpatError:格式不正確(令牌無效):第14行,第36列?。請提出如何解決此問題的建議?

file.xml
<?xml version="1.0" encoding="utf-8" ?>
<Fax>
<FaxID>1137</FaxID>
<Owner>MUMBAI</Owner>
<IsReceived>True</IsReceived>
<FileName>In201804231733471833E6478.tif</FileName>
<CreateTime>2018-04-23 17:33:54</CreateTime>
<Pages>2</Pages>
<Status>DoneOK</Status>  
<ToFaxNumber></ToFaxNumber>
<ToCompanyName></ToCompanyName>
<ToFaxNumber></ToFaxNumber>
<ToName></ToName>
<FromName>Test Email & Transaction from Test Branch</FromName>
<FromCompanyName></FromCompanyName>
<FromFaxNumber>-6194</FromFaxNumber>  
<SendJobID>0</SendJobID>
<Matter>23-Apr-18 17:33</Matter>
<BillingCode>emailid@example.com</BillingCode>
<CustomCode1>0000482</CustomCode1>
<CustomCode2>Apr 23 2018  5:33PM</CustomCode2>
<Subject></Subject>  
<FromFaxNumber>-6194</FromFaxNumber>
<CallerID>-6194</CallerID>
</Fax>

示例腳本

from xml.dom.minidom import parse, parseString
import os
import glob


path = r'C:\Users\sachin\Desktop\xmlwatcher'

for xml in glob.glob(os.path.join(path, '*.xml')):
    xmldoc = parse(xml)
    Subject = xmldoc.getElementsByTagName('FromName')[0].firstChild.data
    print(Subject)

不幸的是,xml.dom.minidom是正確的。 正確的xml文本不應包含Raw &字符。 在xml中, &用於引入實體,應以&amp;代替&amp;

因此,任何嚴格的 xml解析器都應在該行阻塞,因為這是非法的。

該怎么辦?

最好的方法是修復生產者中的錯誤,並處理正確的xml文件。 如果不可能,您可以嘗試手動修復它,並用&amp;替換所有行&

一種簡單且可能更強大的方法是使用BeautifulSoup。 這是解析錯誤輸入的絕佳選擇,並且能夠自動找到面對錯誤輸入文件的最佳解釋。 這里:

t = """<?xml version="1.0" encoding="utf-8" ?>
<Fax>
...
<FromName>Test Email & Transaction from Test Branch</FromName>
...
</Fax>"""

import bs4

soup = bs4.BeautifulSoup(t, 'html.parser')
print(soup.prettify())

修復違規&並顯示:

<?xml version="1.0" encoding="utf-8" ?>
<fax>
 ...
 <fromname>
  Test Email &amp; Transaction from Test Branch
 </fromname>
 ...
</fax>

暫無
暫無

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

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