python 2.7 xml - 从注释下面的特定注释中获取值

时间:2016-12-19 18:52:25

标签: python xml elementtree

他在Dynamo中使用IronPython 2.7。 我需要从一个真正的大xml中获取特定音符的值。我做了一个例子xml,所以你更好地理解问题。 所以我需要获得" lvl"的价值,但仅限于注释"到"。

在我收到错误的那一刻:

  

TypeError:列表对象不可用"

换行:

list.extend(elem.findall(match))

我做错了什么?有没有更好/更简单的方法呢?

以下是xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <note2>
        <yolo>
            <to>
                <type>
                    <game>
                        <name>Jani</name>
                        <lvl>111111</lvl>
                        <fun>2222222</fun>
                    </game>
                </type>
            </to>
            <mo>
                <type>
                    <game>
                        <name>Bani</name>
                        <lvl>3333333</lvl>
                        <fun>44444444</fun>
                    </game>
                </type>
            </mo>
        </yolo>
    </note2>
</note>

这是我的代码:

import clr
import sys

clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
sys.path.append("C:\Program Files (x86)\IronPython 2.7\Lib")
import xml.etree.ElementTree as ET

xml="note.xml"

xpathstr=".//yolo"
match ="lvl"

list=[]

tree = ET.parse(xml)
root = tree.getroot()

specific = root.findall(xpathstr)

for elem in specific:
    list.extend(elem.findall(match))

print tree, root, specific, list

1 个答案:

答案 0 :(得分:1)

如果您需要获取“lvl”的值,但只能在注释“to”中,您可以在一个xpath中执行:

import xml.etree.ElementTree as ET
xml="note.xml"
xpathstr=".//to//lvl"
tree = ET.parse(xml)
root = tree.getroot()
specific = root.findall(xpathstr)
list=[]
for elem in specific:
    list.append(elem.text)
print (list)

给出:

['111111']

如果您知道有“type”和“game”元素包含“lvl”,您可以选择使用xpath“.//to / type /game / lvl”或者必须包含元素“to” “yolo”然后使用“.// yolo / to / type / game / lvl”

你可能想要使用list.append而不是list.extend,但也许不是,我不知道你的其余代码。