Как мне получить доступ к элементам, разделенным запятой в тегах xml? - PullRequest
0 голосов
/ 14 июля 2020

Мне нужно сохранить элементы, разделенные запятой, в xml тегах

Например, эти координаты x и y:

<points>
    <point>558.000000,790.000000</point>
    <point>530.000000,829.000000</point>
    <point>567.000000,855.000000</point>
    <point>595.000000,815.000000</point>
    <point>558.000000,790.000000</point>
</points>

Я пробовал что-то вроде этого

x1, y1 = ((item.getElementsByTagName('points')[0]).getElementsByTagName('point')[0]).firstChild.data

Но возникла следующая ошибка

ValueError: too many values to unpack (expected 2)

Любая помощь в этом будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Я недавно работал над доступом к тегам XML, и я предпочитаю xml.dom.minidom библиотеку python для этого использования.

Код для ваших вышеупомянутых тегов XML в вопросе: :

import xml.dom.minidom as minidom

name = "<points><point>558.000000,790.000000</point><point>530.000000,829.000000</point><point>567.000000," \
       "855.000000</point><point>595.000000,815.000000</point><point>558.000000,790.000000</point></points> "
point = []
xml_loaded = minidom.parseString(name)
Points_Node = xml_loaded.getElementsByTagName("points")
for Main_Node in range(len(Points_Node)):
    Point_Child = Points_Node[Main_Node].getElementsByTagName("point")

for Child_Node in range(len(Point_Child)):
    point.append((Point_Child[Child_Node].firstChild.nodeValue).split(","))

print(point)

Выходные данные для вышеупомянутого кода разделяются координатами x и y и сохраняются в массиве, как вы просили в вопросе. Результат можно увидеть ниже:

[['558.000000', '790.000000'], ['530.000000', '829.000000'], ['567.000000', '855.000000'], ['595.000000', '815.000000'], ['558.000000', '790.000000']]

Надеюсь на эту помощь, пожалуйста, дайте мне знать, если это то, что вы хотите.

0 голосов
/ 14 июля 2020

Вы можете использовать

import xml.etree.ElementTree as ET

data = """
<points>
    <point>558.000000,790.000000</point>
    <point>530.000000,829.000000</point>
    <point>567.000000,855.000000</point>
    <point>595.000000,815.000000</point>
    <point>558.000000,790.000000</point>
</points>
"""

tree = ET.fromstring(data)
for element in tree:
    x,y = element.text.split(",")
    print(x, y)
...