Python и specyfi c xml проблема файла похвалы, не могу получить значения из getchildren () - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь написать скрипт, который может изменить значения в файле xml, но файл имеет очень сложную конструкцию. Мне нужно, чтобы значения редактировались из xml строки «r2dd» точно: 10,0; 10,0; 26,0; 14,0. Я не могу присвоить их переменной.

xml файл:

<?xml version="1.0" encoding="UTF-8"?>
<objects fpmi.archive.type="components" framework.version="7.9.8.2018060714" fpmi.version="9.9.8.0" timestamp="Thu Sep 27 15:00:19 CEST 2018">
  <arraylist len="0"/>
<c cls="com.inductiveautomation.factorypmi.application.components.template.TemplateHolder">
  <c-comm>
    <p2df>26.0;14.0</p2df>
    <r2dd>10.0;10.0;26.0;14.0</r2dd>
    <str>X123_C61023</str>
    <lc>10.0;10.0;16;0;0.7058824;1.3333334</lc>
  </c-comm>
  <c-c m="setParameterValues" s="1;java.util.Map">
    <o cls="java.util.HashMap">
      <o-c m="put" s="2;O;O">
        <str>tagPath</str>
        <str>X123_X123_C61023</str>
      </o-c>
    </o>
  </c-c>
  <c-c m="setTemplatePath" s="1;str">
    <str>[network]premium/aw1/tags/monitors</str>
  </c-c>
</c>

это мой код:

import xml.etree.ElementTree as ET

mytree = ET.parse('sample.xml')
myroot = mytree.getroot()

for x in myroot.findall('c'):
    other=x.find('c-comm').getchildren()
    print('values : ', other)
    other_value=other.get('type')
    print(other_value)

Пожалуйста, может кто-нибудь помочь мне назначить это значения из "r2dd" xml строк в переменную? На данный момент консоль показывает только:

    other_value=other.get('type')
AttributeError: 'list' object has no attribute 'get'
values :  [<Element 'p2df' at 0x035753C0>, <Element 'r2dd' at 0x03575410>, <Element 'str' at 0x03575438>, <Element 'lc' at 0x03575488>]

, но без значений. помогите пожалуйста

(я могу получить доступ к этим элементам только с помощью getchildren () ... но это неправильный путь).

1 Ответ

0 голосов
/ 21 марта 2020

Я думаю, это потому, что вы не индексируете список, который возвращает getchildren.

other=x.find('c-comm').getchildren()
print('values : ', other)
other_value=other.get('type')

Как вы можете видеть в этой части, вы храните список дочерних элементов внутри другого, а затем обрабатываете эту переменную как ребенок. И вы можете наблюдать это в распечатке, которую вы публикуете:

values :  [<Element 'p2df' at 0x035753C0>, <Element 'r2dd' at 0x03575410>, <Element 'str' at 0x03575438>, <Element 'lc' at 0x03575488>]

Итак, вы ищете второй элемент этого списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...