2016-12-21 27 views
2

XMLのうち「lvl」ノードの数を「」より下にする必要があります。 私は、IronPython 2.7とelementtreeをDynamoで使用しています。 これは単なるXMLの例ですが、実際ははるかに大きくなっています。Python XML - ノードの下にある特定のノードをカウントする

私はそれを取得しようとする方法がありますが、それは動作しません(私は下のコードを最初に示しています)。 最初:「ちょうど」要素を数えます。 第2の:すべてのループのテキスト値を別々のリストに挿入します。そのあとでリスト要素を数えることができます。

<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> 

はここに私のコードです:

は、ここに私のXMLである

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 

は、だから私はすべてのforループをカウントしてみたが、私は唯一の0の値のリストを取得します。 私のXMLには、次のような結果が期待されます:Listcount[3,1]

+0

私は、 'yolo'タグに属する' lvl'のカウント数だけを正確に理解していますか? –

+0

私は間違いを犯しました。私は、 "to"タグの下にあるすべてのlvlを数えなければなりません。ごめんなさい;) – Yuli

答えて

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を追加lvl」を「」内で検索することができます。 これ以降、リストカウントのすべてのオブジェクトがカウントされます。

関連する問題