2016-05-24 8 views
1

Ich versuche, ein verarbeitetes XML zu lesen und ein viertes Attribut mit elementtree hinzuzufügen.Hinzufügen von zusätzlichen XML-Attributen zu einem Unterelement python

<ID_List> 
<Samples> 
    <Sample> 
    <Attribute Name="SampleID" Value="0000000"/> 
    <Attribute Name="ListNumber" Value="0000000"/> 
    <Attribute Name="TestID" Value="ABCDEFGHIJK"/> 
</Sample> 
</ID_List> 

mein Code so weit

import xml.etree.cElementTree as ET 
tree = ET.ElementTree(file=<path>) 
root = tree.getroot() 
for subelem in root[2]: # IDlist is root[0], Samples is root[1] need to add attribute to root[3] sample 
    for subelem2 in subelem: 
     subelem2.set("Name", "4th attribute") 
+0

was ist Ihre erwartete Ausgabe? –

Antwort

0

Um ein neues Attribut-Tag fügen Sie einfach den neuen Tag anhängen:

from xml.etree import cElementTree as et 

x = """<ID_List> 
<Samples> 
    <Sample> 
    <Attribute Name="SampleID" Value="0000000"/> 
    <Attribute Name="ListNumber" Value="0000000"/> 
    <Attribute Name="TestID" Value="ABCDEFGHIJK"/> 
</Sample> 
</Samples> 
</ID_List>""" 

xml = et.fromstring(x) 

tag = xml.find(".//Samples/Sample") 
new = et.Element("Attribute", dict(Name="Foo", Value="12345")) 
tag.append(new) 

print(et.tostring(xml)) 

Welche würden Sie geben:

<ID_List> 
<Samples> 
    <Sample> 
    <Attribute Name="SampleID" Value="0000000" /> 
    <Attribute Name="ListNumber" Value="0000000" /> 
    <Attribute Name="TestID" Value="ABCDEFGHIJK" /> 
<Attribute Name="Foo" Value="12345" /> 
</Sample> 
</Samples> 
</ID_List> 

zu Aktualisieren Sie die Datei:

In [4]: cat test.xml 
<?xml version="1.0" encoding="utf-8"?> 
<ID_List> 
<Samples> 
    <Sample> 
    <Attribute Name="SampleID" Value="0000000"/> 
    <Attribute Name="ListNumber" Value="0000000"/> 
    <Attribute Name="TestID" Value="ABCDEFGHIJK"/> 
</Sample> 
</Samples> 
</ID_List> 
In [5]: from xml.etree import cElementTree as et 

In [6]: xml = et.parse("test.xml") 

In [7]: tag = xml.find(".//Samples/Sample") 

In [8]: tag.append(et.Element("Attrbute",{"Name":"Foo","Value":"12345"})) 

In [9]: xml.write("test.xml") 

In [10]: cat test.xml 
<ID_List> 
<Samples> 
    <Sample> 
    <Attribute Name="SampleID" Value="0000000" /> 
    <Attribute Name="ListNumber" Value="0000000" /> 
    <Attribute Name="TestID" Value="ABCDEFGHIJK" /> 
<Attrbute Name="Foo" Value="12345" /></Sample> 
</Samples> 
</ID_List> 
+0

Ich möchte ein neues Attribut-Tag hinzufügen, aber ich möchte dies aus einer XML-Datei und nicht aus einer Zeichenfolge tun. – Ahk86

+0

Ich habe die Zeichenfolge als Beispiel verwendet, die Logik ist genau das gleiche Lesen aus einer Datei. –

+0

Ich bekomme immer ein 'ElementTree' Objekt hat kein Attribut 'Tag' Fehler – Ahk86