[英]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中, &
用於引入實體,應以&
代替&
。
因此,任何嚴格的 xml解析器都應在該行阻塞,因為這是非法的。
該怎么辦?
最好的方法是修復生產者中的錯誤,並處理正確的xml文件。 如果不可能,您可以嘗試手動修復它,並用&
替換所有行&
。
一種簡單且可能更強大的方法是使用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 & Transaction from Test Branch
</fromname>
...
</fax>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.