разобрать несколько XML-файлов с помощью Python - PullRequest
0 голосов
/ 06 июня 2018

У меня есть несколько 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)

Ошибка -

Ошибка типа: аргумент типа «Документ» не повторяется

Есть ли способ сделать это? Помощь!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы также можете использовать синтаксический анализ файлов xml, используя xml.etree:

from xml.etree import ElementTree

for i in root:
    counter = counter + 1
    for child in root[counter]:
        if child.tag == 'ChildTagName':
            for subchild in child:
                if subchild.tag == 'SubchildTagName':
                    my_VariableName = subchild.text
0 голосов
/ 06 июня 2018

Я думаю, что лучше разобрать xml в python, используя xmltodict

, вам просто нужно:

import xmltodict

, а затем:

data = xmltodict.parse(xml)

и затем вашXML-файл преобразуется в python dict, с которым вы можете легко работать. В вашем случае вы можете запустить цикл для преобразования всех файлов в dict.

...