سؤال

قليلا من سؤال المبتدئين هنا:

قل لدي كتلة من XML:

<root>
 <district>
  <house><room><door/><room></house>
 </district>
 <district>
  <street>
   <house>and so on</house>
  </street>

إلخ.

مع Elementtree يمكنني القيام به:

houses=doc.findall(".//house")

لاختيار جميع العقد المنزلية ، بغض النظر عن والديهم. ما أريد القيام به الآن هو تحويل كل من العقد المنزلية إلى كائن شجرة منفصل.

جزء من سبب ذلك هو أنني أريد بعد ذلك اكتشاف اكتشاف آخر:

door=houseXml.findall(".//door")

يمكنني أن أفعل شيئًا مثل:

for _house in houses:
    houseXml=_house.getiterator

لكن هذا لا يبدو أنه يفعل ما أريد.

هل أنا على خطأ؟

هل كانت مفيدة؟

المحلول

تستطيع الاتصال findall على العناصر التي تم إرجاعها من قبل الأول findall:

>>> doc = """<root>
...  <district>
...   <house><room><door/></room></house>
...  </district>
...  <district>
...   <street>
...    <house>and so on</house>
...   </street>
...  </district>
... </root>"""
>>>
>>> from xml.etree import cElementTree as ET
>>>
>>> r = ET.XML(doc)
>>>
>>> for house in r.findall('.//house'):
...   print house, house.findall('.//door')
...
<Element 'house' at 0xb7f3ea70> [<Element 'door' at 0xb7f3eab8>]
<Element 'house' at 0xb7f3eb00> []
>>>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top