Анализ файла XML и сопоставление текста в веб-маяке - PullRequest
0 голосов
/ 28 января 2019

Вот выдержка из моего .xml файла

<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<!-- question: 0  -->
  <question type="category">
    <category>
        <text>$course$/Default for Differentialekvationer/Hemuppgifter/Misc</text>

    </category>
  </question>

<!-- question: 13201  -->
  <question type="multichoice">
    <name>
      <text>Differential equations, understanding 1 [FI/SV/EN]</text>
    </name>
    <questiontext format="html">
      <text><![CDATA[<p><span lang="EN" class="multilang">Which of the following differential equations are linear?</span><span lang="FI" class="multilang">Mikä tai mitkä seuraavista differentiaaliyhtälöistä ovat lineaarisia?</span><span lang="SV" class="multilang">Vilken eller vilka av följande differentialekvationer är linjära?</span></p><p><span lang="EN" class="multilang">Every correct answer will yield an equal amount of points, the maximum being 1p in total, whereas every incorrect answer will cause a reduction of -0,2p.</span><span lang="FI" class="multilang">Jokainen oikein ruksittu kohta tuottaa yhtä paljon pisteitä, tehtävän maksimin ollessa 1p, kun taas jokainen virheellinen vastaus aiheuttaa -0,2p pistevähennyksen.</span><span lang="SV" class="multilang">Varje rätt ikryssat svar bidrar lika mycket till totalt 1p, medan varje ikryssat fel svar ger ett avdrag på -0,2p.</span><br></p>]]></text>
    </questiontext>
    <generalfeedback format="html">
      <text><![CDATA[<p><span lang="EN" class="multilang">A linear differential equation consists purely of linear combinations of an unknown function and its derivatives. In other words, if \(y\) is the sought function, then the differential equation shall not contain term \(y^2\), for example, since it does not depend in any way on what kind of expressions of \(x\) appear in the coefficients.</span><span lang="FI" class="multilang">Lineaarinen differentiaaliyhtälö koostuu ainoastaan tuntemattoman funktion ja sen derivaattojen lineaarikombinaatioista. Differentiaaliyhtälössä ei siis saa esiintyä esim. termiä \(y^2\), jossa \(y\) on etsitty funktio, koska se ei riipu millään tavalla siitä, millaisia muuttujasta \(x\) riippuvia lausekkeita yhtälön vakioissa esiintyy.</span><span lang="SV" class="multilang">En linjär differentialekvation består endast av linjära kombinationer av den okända funktionen och dess derivator. Dvs. det får inte förekomma termer som t.ex. \(y^2\) då \(y\) är den sökta funktionen, däremot spelar det ingen roll hurdana uttryck av \(x\) som förekommer i koefficienterna.</span></p>]]></text>
    </generalfeedback>
    <defaultgrade>1.0000000</defaultgrade>
    <penalty>0.1000000</penalty>
    <hidden>0</hidden>
    <single>false</single>
    <shuffleanswers>true</shuffleanswers>
    <answernumbering>abc</answernumbering>
    <correctfeedback format="html">
      <text><![CDATA[<p><span lang="EN" class="multilang">Correct answer, well done!</span><span lang="FI" class="multilang">Oikea vastaus, hienosti tehty!</span><span lang="SV" class="multilang">Rätt svar, bra jobbat!</span></p>]]></text>
    </correctfeedback>
    <partiallycorrectfeedback format="html">
      <text><![CDATA[<p><span lang="EN" class="multilang">Your answer is partially correct.</span><span lang="FI" class="multilang">Vastauksesi on osittain oikein.</span><span lang="SV" class="multilang">Svaret är delvis rätt.</span></p>]]></text>
    </partiallycorrectfeedback>
...
</quiz>

, и я хотел бы сопоставить каждый фрагмент предложений, содержащийся между веб-маяком

<span lang="EN" class="multilang">

и его закрытием

</span>

и я хотел бы сохранить это совпадение в переменной "tmp".

Вот что я должен упростить:

import xml.etree.ElementTree as ET
import sys 

tree = ET.parse('eq_diff_backup.xml')
root = tree.getroot()
import re

for tg in root.findall('text'):
    print tg

for child in root.iter():
    if child.tag=="text":
       if not child.text is None:
           res = re.findall(r'<span lang="EN" class="multilang">(.*?)?</span>', child.text)
           if len(res)>0:
                print res[0]

но я не делаюкак мое решение (безобразно).что можно улучшить в этом решении?

...