使用python解析多个xml文件

时间:2018-06-06 04:17:31

标签: python xml parsing minidom

我在一个文件夹中有多个xml文件。我想解析所有的xml文件。我尝试过minidom解析但是我做不到。这里的xml文件就像 -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="frame.xsl"?>
<frame cBy="KmG" cDate="03/05/2008 03:50:35 PST Wed" name="Abandonment" ID="2031" xsi:schemaLocation="../schema/frame.xsd" xmlns="http://framenet.icsi.berkeley.edu" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <definition>&lt;def-root&gt;An &lt;fex name="Agent"&gt;Agent&lt;/fex&gt; leaves behind a &lt;fex name="Theme"&gt;Theme&lt;/fex&gt; effectively rendering it no longer within their control or of the normal security as one's property. 

&lt;ex&gt;&lt;fex name="Agent"&gt;Carolyn&lt;/fex&gt; &lt;t&gt;abandoned&lt;/t&gt; &lt;fex name="Theme"&gt;her car&lt;/fex&gt; and jumped on a red double decker bus.&lt;/ex&gt;

&lt;ex&gt;Perhaps &lt;fex name="Agent"&gt;he&lt;/fex&gt; &lt;t&gt;left&lt;/t&gt; &lt;fex name="Theme"&gt;the key&lt;/fex&gt; in the ignition&lt;/ex&gt;

&lt;ex&gt;&lt;t&gt;Abandonment&lt;/t&gt; &lt;fex name="Theme"&gt;of a child&lt;/fex&gt; is considered to be a serious crime in many jurisdictions.&lt;/ex&gt; 
</frame>

我在下面的代码中尝试了这个 - 我想只采用ex。

之间的界限
from helperDef import *
import os
from xml.dom import minidom

for root, dirs, files in os.walk('frame'):
    for file in files:
        if (file.endswith('.xml')):
             xmldoc = minidom.parse(os.path.join(root, file))
             if '<ex>' in xmldoc:
                line = find_between(xmldoc, '<ex>', '</ex>')
                print(line)
                clean_line = cleanText(line)
                print(clean_line)

错误是 -

  

TypeError:“Document”类型的参数不可迭代

任何方法都可以做到这一点?帮助!

2 个答案:

答案 0 :(得分:0)

我认为在python中解析xml更好的方法是使用xmltodict

你只需要:

import xmltodict

然后:

data = xmltodict.parse(xml)

然后你的xml文件被转换为python dict,你可以轻松地工作。在你的情况下,你可以运行一个循环将所有文件转换为dicts。

答案 1 :(得分:0)

您还可以使用xml.etree:

来使用解析xml文件

sessionStorage