Python XML - 计算节点

时间:2016-12-21 15:53:24

标签: python xml python-2.7 count nodes

我需要从XML中获取“”下面的所有“ lvl ”节点的数量。 我在Dynamo中使用IronPython 2.7和elementtree。 这只是一个示例XML,实际上它要大得多。

我试图通过两种方式获取它,但它不起作用(我只在下面的代码中显示第一种方式)。 首先:“只是”计算元素。 第二:在分隔列表中插入每个循环的文本值,这样我就可以计算后面的元素。

这是我的XML:

<note>
    <note2>
        <yolo>
            <to>
                <type>
                    <game>
                        <name>Jani</name>
                        <lvl>111111</lvl>
                        <lvl>222222</lvl>
                        <fun>2222222</fun>
                    </game>
                    <game>
                        <name>Jani</name>
                        <lvl>111111</lvl>
                        <fun>2222222</fun>
                    </game>
                </type>
            </to>
            <to>
                <type>
                    <game>
                        <name>Bani</name>
                        <lvl>3333333</lvl>
                        <fun>44444444</fun>
                    </game>
                </type>
            </to>
        </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

import xml.etree.ElementTree as ET
xml="note.xml"
xpathstr=".//to//lvl"
tree = ET.parse(xml)
root = tree.getroot()
specific = root.findall(xpathstr)
list=[]
listcount=[]

for elem in specific:
    list.extend(elem.itertext())
    listcount.Add(len(elem))

print list,list2

所以我尝试计算每个循环,但是我得到一个只有0个值的列表。 对于我的XML,我希望得到如下结果:Listcount[3,1]

1 个答案:

答案 0 :(得分:0)

我解决了它!;),但它并不完美......我对其他解决方案持开放态度......

这是我的代码:

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 =".//to//lvl"
xpathstr2 =".//to"
searchforxpath= ".//lvl"

tree = ET.parse(xml)
list=[]
listcount=[]

root = tree.getroot()
specific = root.findall(xpathstr)
countmatch = root.findall(xpathstr2)

for elem in countmatch:
    listcount.append(elem.iterfind(searchforxpath))

for elem in specific:
    list.append(elem.text)


print list, listcount 

我添加了两个新的xpath ,因此我可以搜索&#34; lvl &#34;在&#34; &#34;。 在此之后我计算listcount中的所有对象。