Ricerca…


Osservazioni

Non tutti gli elementi dell'ingresso XML finiranno come elementi dell'albero analizzato. Attualmente, questo modulo ignora tutti i commenti XML, le istruzioni di elaborazione e le dichiarazioni del tipo di documento nell'input. Tuttavia, gli alberi creati usando l'API di questo modulo piuttosto che l'analisi dal testo XML possono contenere commenti e istruzioni di elaborazione; saranno inclusi durante la generazione dell'output XML.

Aprire e leggere usando un ElementTree

Importa l'oggetto ElementTree, apri il relativo file .xml e ottieni il tag radice:

import xml.etree.ElementTree as ET
tree = ET.parse("yourXMLfile.xml")
root = tree.getroot()

Ci sono alcuni modi per cercare attraverso l'albero. Il primo è per iterazione:

for child in root:
    print(child.tag, child.attrib)

Altrimenti puoi fare riferimento a posizioni specifiche come una lista:

print(root[0][1].text)

Per cercare tag specifici per nome, usa il .find o .findall :

print(root.findall("myTag"))
print(root[0].find("myOtherTag"))

Modifica di un file XML

Importa il modulo Albero degli elementi e apri il file xml, ottieni un elemento xml

import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root=tree.getroot()
element = root[0] #get first child of root element

L'oggetto Element può essere manipolato cambiando i suoi campi, aggiungendo e modificando attributi, aggiungendo e rimuovendo i bambini

element.set('attribute_name', 'attribute_value') #set the attribute to xml element
element.text="string_text"

Se si desidera rimuovere un elemento, utilizzare il metodo Element.remove ()

root.remove(element)

Metodo ElementTree.write () utilizzato per l'output di oggetti xml in file xml.

tree.write('output.xml')

Crea e crea documenti XML

Importa il modulo Albero degli elementi

import xml.etree.ElementTree as ET

La funzione Element () viene utilizzata per creare elementi XML

p=ET.Element('parent')

Funzione SubElement () utilizzata per creare elementi secondari in un elemento give

c = ET.SubElement(p, 'child1')

la funzione dump () viene utilizzata per scaricare elementi xml.

ET.dump(p)
# Output will be like this
#<parent><child1 /></parent>

Se vuoi salvare in un file creare un albero xml con la funzione ElementTree () e salvare in un file usa il metodo write ()

tree = ET.ElementTree(p)
tree.write("output.xml")

La funzione Comment () è utilizzata per inserire commenti nel file xml.

comment = ET.Comment('user comment')
p.append(comment) #this comment will be appended to parent element

Apertura e lettura di file XML di grandi dimensioni mediante iterparse (analisi incrementale)

A volte non vogliamo caricare l'intero file XML per ottenere le informazioni di cui abbiamo bisogno. In questi casi, è utile poter caricare in modo incrementale le sezioni pertinenti e quindi cancellarle quando abbiamo finito. Con la funzione iterparse puoi modificare l'albero degli elementi che viene memorizzato mentre analizzi l'XML.

Importa l'oggetto ElementTree:

import xml.etree.ElementTree as ET

Aprire il file .xml e scorrere su tutti gli elementi:

for event, elem in ET.iterparse("yourXMLfile.xml"):
    ... do something ...

In alternativa, possiamo cercare solo eventi specifici, come tag inizio / fine o spazi dei nomi. Se questa opzione è omessa (come sopra), vengono restituiti solo gli eventi "di fine":

events=("start", "end", "start-ns", "end-ns")
for event, elem in ET.iterparse("yourXMLfile.xml", events=events):
    ... do something ...

Ecco l'esempio completo che mostra come cancellare elementi dalla struttura in memoria quando abbiamo finito con loro:

for event, elem in ET.iterparse("yourXMLfile.xml", events=("start","end")):        
    if elem.tag == "record_tag" and event == "end":
        print elem.text
        elem.clear()
    ... do something else ...

Ricerca nell'XML con XPath

A partire dalla versione 2.7 ElementTree ha un supporto migliore per le query XPath. XPath è una sintassi che ti consente di navigare attraverso un xml come SQL è usato per cercare attraverso un database. Entrambe le funzioni find e findall supportano XPath. L'xml qui sotto sarà usato per questo esempio

 <Catalog>
    <Books>
        <Book id="1" price="7.95">
            <Title>Do Androids Dream of Electric Sheep?</Title>
            <Author>Philip K. Dick</Author>
        </Book>
        <Book id="5" price="5.95">
            <Title>The Colour of Magic</Title>
            <Author>Terry Pratchett</Author>
        </Book>
        <Book id="7" price="6.95">
            <Title>The Eye of The World</Title>
            <Author>Robert Jordan</Author>
        </Book>
    </Books>
</Catalog>

Ricerca di tutti i libri:

import xml.etree.cElementTree as ET
tree = ET.parse('sample.xml')
tree.findall('Books/Book')

Alla ricerca del libro con titolo = 'The Colour of Magic':

tree.find("Books/Book[Title='The Colour of Magic']") 
# always use '' in the right side of the comparison

Cercando il libro con id = 5:

tree.find("Books/Book[@id='5']")
# searches with xml attributes must have '@' before the name

Cerca il secondo libro:

tree.find("Books/Book[2]")
# indexes starts at 1, not 0

Cerca l'ultimo libro:

tree.find("Books/Book[last()]")
# 'last' is the only xpath function allowed in ElementTree

Cerca tutti gli autori:

tree.findall(".//Author")
#searches with // must use a relative path


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow