Member 13042051 Ответов: 1

Xml-списки сравниваются с Python


Я проанализировал XML-файл, выглядящий следующим образом:

 <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE raml SYSTEM 'raml20.dtd'>
    <raml version="2.0" xmlns="raml20.xsd">
    <cmData type="actual">
        <managedObject class="LN" distName="PTR" id="2425">
          <p name="aak">220</p>
          <p name="orp">05</p>
          <p name="name">Portro</p>
          <p name="optres">false</p>
          <p name="optblu">false</p>
          <p name="aoptdet">false</p>
          <p name="advcell">false</p>
            <list name="sibList">
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">2</p>
            </item>
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">1</p>
            </item>
          </list>
         </managedObject>
       <managedObject class="LN" distName="KRNS" id="93886">
          <p name="aak">150</p>
          <p name="orp">05</p>
          <p name="name">Portro</p>
          <p name="optres">false</p>
          <p name="optblu">tru</p>
          <p name="aoptdet">false</p>
          <p name="advcell">true</p>
        <list name="sibList">
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">1</p>
            </item>
            <item>
              <p name="sibcity">180</p>
              <p name="sibrep">2</p>
            </item>
          </list>
    </menagedObject>
    ....
    <menagedObject>
    ...
    </menagedObject>
    ...
</cmData>
</raml>


Мне нужно пройти через весь menagedObject и сравнить все параметры(имя p). Я написал код для сравнения, но я не знаю, как пройти через список и сравнить параметры, если они имеют одинаковое значение, ничего не делать, если они разные, выдавать выходные данные разных параметров и значений. Я написал эту функцию, где клавиша "P имя" и значением является значение "P имя":

Что я уже пробовал:

temp = []
for i in temp_ln:
    for j, k in zip(i.getchildren(), i):
        temp.append([i.get('distName'), j.get('name'), j.text])

    tempdict = {}
    for i in temp_ln:
        td = {}
        for j in i.getchildren():
            td.update({j.get('name'): j.text})
        tempdict.update({i.get('distName'): td})

        main_dif = {}
        for key, value in tempdict.iteritems():
            dif_k = {}
            for k, v in value.iteritems():
                try: 
                    a = ref[k]
                except:
                    a = None
                if v != a:
                    if k == 'name':
                        pass
                    else:
                        dif_k.update({k:(v, a)})
            main_dif.update({key:dif_k})

1 Ответов

Рейтинг:
1

Member 13042051

Я ошибся с xml-файлом,он не выглядит так, пропуская все ниже.

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE raml SYSTEM 'raml20.dtd'>
    <raml version="2.0" xmlns="raml20.xsd">
    <cmData type="actual">
        <managedObject class="LN" distName="PTR" id="2425">
          <p name="aak">220</p>
          <p name="orp">05</p>
          <p name="name">Portro</p>
          <p name="optres">false</p>
          <p name="optblu">false</p>
          <p name="aoptdet">false</p>
          <p name="advcell">false</p>
            <list name="sibList">
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">2</p>
            </item>
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">1</p>
            </item>
          
         
       <managedObject class="LN" distName="KRNS" id="93886">
          <p name="aak">150</p>
          <p name="orp">05</p>
          <p name="name">Portro</p>
          <p name="optres">false</p>
          <p name="optblu">tru</p>
          <p name="aoptdet">false</p>
          <p name="advcell">true</p>
        <list name="sibList">
            <item>
              <p name="sibcity">177</p>
              <p name="sibrep">1</p>
            </item>
            <item>
              <p name="sibcity">180</p>
              <p name="sibrep">2</p>
            </item>
          
    
    ....
    <menagedobject>
    ...
    </menagedobject>
    ...