0
我试图处理具有下列结构的文件:Python的 - 解析其中包含多个XML部分文件
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE doc SYSTEM "djnml-1.0b.dtd">
<doc msize="000007622" md5="235d6d9aa0071dd0bd711e812ff918fc" sysId="sbknwsarchp01" destination="AW" distId=" " transmission-date=" " >
<djnml publisher="DJN" docdate="20160301" product="DN" seq="4" xml:lang="en-us" >
<head>
<copyright year="2016" holder="text" ></copyright>
<docdata>
<djn>
<djn-newswires news-source="DJDN" origin="DJ" service-id="CO" >
<djn-press-cutout/>
<djn-urgency>0</djn-urgency>
<djn-mdata brand="DJ" temp-perm="P" retention="N" hot="N" original-source="DJCS" accession-number="20160301000004" page-citation="" display-date="20160301T050006.315Z" >
<djn-coding>
<djn-government>
<c>G/AGD</c>
<c>G/USG</c>
</djn-government>
<djn-page>
<c>70180</c>
<c>83567</c>
</djn-page>
<djn-subject>
<c>N/DJAG</c>
<c>N/DJCS</c>
</djn-subject>
<djn-market>
<c>M/MMR</c>
</djn-market>
<djn-product>
<c>P/ACMD</c>
<c>P/FNVW</c>
</djn-product>
<djn-geo>
<c>R/NME</c>
<c>R/TN</c>
</djn-geo>
</djn-coding>
</djn-mdata>
</djn-newswires>
</djn>
</docdata>
</head>
<body>
<headline brand-display="DJ" >
text</headline>
<text>
<pre>
text
</pre>
<p>
text</p>
<p>
text</p>
</text>
</body>
</djnml>
</doc>
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE doc SYSTEM "djnml-1.0b.dtd">
<doc msize="000002698" md5="81b0dd0339b8c77febf46ebdaf8ef617" sysId="sbknwsarchp01" destination="AW" distId=" " transmission-date=" " >
<djnml publisher="DJN" docdate="20160301" product="DN" seq="70" xml:lang="en-us" >
<head>
<copyright year="2016" holder="text" ></copyright>
<docdata>
<djn>
<djn-newswires news-source="DJDN" origin="DJ" service-id="CO" >
<djn-press-cutout/>
<djn-urgency>0</djn-urgency>
<djn-mdata brand="DJ" temp-perm="P" retention="N" hot="N" original-source="FW" accession-number="20160301000070" page-citation="" display-date="20160301T052632.174Z" >
<djn-coding>
<djn-company>
<c>ANZ.AU</c>
<c>ANZ.NZ</c>
<c>ANZBY</c>
</djn-company>
<djn-isin>
<c>AU000000ANZ3</c>
<c>US0525283042</c>
</djn-isin>
<djn-industry>
<c>I/BAN</c>
<c>I/BKS</c>
</djn-industry>
<djn-page>
<c>22767</c>
<c>5014</c>
<c>55115</c>
</djn-page>
<djn-subject>
<c>N/AER</c>
<c>N/BKG</c>
</djn-subject>
<djn-market>
<c>M/FCL</c>
<c>M/NND</c>
</djn-market>
<djn-product>
<c>P/ABO</c>
<c>P/AEI</c>
</djn-product>
<djn-geo>
<c>R/ASA</c>
<c>R/FE</c>
</djn-geo>
</djn-coding>
</djn-mdata>
</djn-newswires>
</djn>
</docdata>
</head>
<body>
<headline brand-display="DJ" >
text</headline>
<text>
<pre>
</pre>
<p>
text </p>
<pre>
Editor JSM
</pre>
<p>
text</p>
<p>
text</p>
</text>
</body>
</djnml>
</doc>
即该文件包含许多较小的“xml”部分。
我想下面的代码:
import xml.etree.ElementTree as ET
tree = ET.parse('test.nml')
root = tree.getroot()
print(root.iter('djn-subject'))
for element_1 in root.iter('djn-subject'):
for element_2 in root.iter('c'):
print(element_2.text)
它给出了一个错误
File "<string>", line unknown
ParseError: junk after document element: line 195, column 0
任何想法,我怎么能摆脱这种错误的?看起来我的XML文件有多个根,有没有办法绕过根或其他方式来处理这个问题?谢谢。
您是否尝试将文件分解为基于xml开始标记的片段?在第一组中阅读应该很容易,然后回去休息。 – Chris
请参阅[我的以前的答案](http://stackoverflow.com/a/41176663/8747),该函数使用ElementTree将多个XML文档从单个文件中分离出来。 –
*看起来我的XML文件有多个根* ...按照W3C标准,这个标记不是一个XML文件。根据定义,XML格式良好,因此像Python的''etree''这样的符合标准的库应该会出错。找到这个标记的来源,无论是软件,供应商还是程序员,并在继续开发工作之前解决这个问题。 – Parfait