2017-01-18 4 views
0

Я работаю с IronPython 2.7 в Dynamo. Мне нужно проверить, существует ли узел. Если это так, текст в узле должен быть записан в список. Если нет, то в список должно быть записано False.Проверьте, существует ли узел

У меня нет ошибки. Но даже если узел существует в списке, он не записывает текст в списке. False правильно записывается в список.

Простой пример:

<note> 
    <note2> 
     <yolo> 
      <to> 
       <type> 
        <game> 
         <name>Jani</name> 
         <lvl>111111</lvl> 
         <fun>2222222</fun> 
        </game> 
       </type> 
      </to> 
      <mo> 
       <type> 
        <game> 
         <name>Bani</name> 
         <fun>44444444</fun> 
        </game> 
       </type> 
      </mo> 
     </yolo> 
    </note2> 
</note> 

Таким образом, узел lvl только в первом узле game. Я ожидаю, что итоговый список будет list[11111, false].

Вот мой код:

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" 

main_xpath=".//game" 
searchforxpath =".//lvl" 

list=[] 

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

main_match = root.findall(main_xpath) 

for elem in main_match: 
if elem.find(searchforxpath) is not None: 
    list.append(elem.text) 
else: 
    list.append(False) 

print list 

Почему список пуст, где строка должна быть? Я получаю list[ ,false].

ответ

1

Вы должны использовать текст матча с elem.find, а не оригинальный элем:

for elem in main_match: 
    subelem = elem.find(searchforxpath) 
    if subelem != None: 
     list.append(subelem.text) 
    else: 
     list.append(False) 
+0

Thx для вашей помощи! Это именно то, что мне нужно :) – Yuli

Смежные вопросы