我需要从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]
。
答案 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中的所有对象。