2016-12-21 1 views
2

"lvl"노드의 수를 XML의 "에서"아래로 가져와야합니다. Dynamo에서 IronPython 2.7 및 elementtree를 사용합니다. 이것은 XML 예제 일뿐입니다. 사실 더 커졌습니다.Python 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> 

여기 내 코드입니다 :

여기 내 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 

그래서 나는 모든 루프 계산하려고 노력하지만, 난 단지 0 값 목록을 가져올 수. 제 XML의 경우 다음과 같은 결과를 기대합니다 : Listcount[3,1].

+0

'yolo' 태그에 속한'lvl'의 수를 계산하는 것이 정확히 이해 되었습니까? –

+0

실수를 저질렀습니다. "to"태그 아래의 모든 소리에 대해 계산해야합니다. 죄송합니다;) – 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"을 "에서"까지 검색 할 수 있습니다. 다음은 listcount에있는 모든 개체를 계산합니다.