Je suis nouveau dans l’arbre des éléments, ici j’essaie de trouver le nombre d’éléments dans l’arbre des éléments.
from lxml import etree
root = etree.parse(open("file.xml",'r'))
est-il possible de trouver le nombre total d'éléments dans la racine?
Recherchez tous les éléments cibles (il existe quelques moyens de le faire), puis utilisez la fonction intégrée len()
pour obtenir le nombre Par exemple, si vous voulez compter uniquement les éléments enfants directs de root:
from lxml import etree
doc = etree.parse("file.xml")
root = doc.getroot()
result = len(root.getchildren())
ou, si vous voulez compter tous les éléments de l'élément racine:
result = len(root.xpath(".//*"))
Une autre façon d’obtenir le nombre de sous-éléments:
len(list(root))
Vous n'avez pas à charger tous les nœuds dans une liste, vous pouvez utiliser sum et iter par la suite:
from lxml import etree
root = etree.parse(open("file.xml",'r'))
count = sum(1 for _ in root.iter("*"))
vous pouvez trouver le nombre de chaque élément comme ceci:
from lxml import objectify
file_root = objectify.parse('path/to/file').getroot()
file_root.countchildren() # root's element count
file_root.YourElementName.countchildren() # count of children in any element
# I used the len(list( )) as a way to get the list of items in a feed, as I
# copy more items I use the original len to break out of a for loop, otherwise
# it would keep going as I add items. Thanks ThomasW for that code.
import xml.etree.ElementTree as ET
def feedDoublePosts(xml_file, item_dup):
tree = ET.ElementTree(file=xml_file)
root = tree.getroot()
for a_post in tree.iter(item_dup):
goround = len(list(a_post))
for post_children in a_post:
if post_children != a_post:
a_post.append(post_children)
goround -= 1
if goround == 0:
break
tree = ET.ElementTree(root)
with open("./data/updated.xml", "w") as f:
tree.write(f)
# ----------------------------------------------------------------------
if __== "__main__":
feedDoublePosts("./data/original_appt.xml", "appointment")