2016-04-13 28 views
0

Wenn ich einen Node zu einem NodeList unter Verwendung der XmlParser in Groovy hinzufügen, scheint die NodeList die Änderung nicht zu reflektieren. Hier ist der Code, den ich in der GroovyConsole teste. Wenn Sie diesen Code ausführen, sollten Sie die Ausgabe "ADD FAILED" sehen, gefolgt von einem Dump der drei Elemente der NodeList. Ich habe auch das gleiche mit XmlSlurper versucht, bin aber zu XmlParser gewechselt, als ich gelesen habe, dass das DOM in XmlSluper grundsätzlich unveränderlich ist und dass Änderungen nur während der Serialisierung angewendet werden. Aber mit XmlParser, sollte das funktionieren?Hinzufügen eines Knotens zu einer Nodeliste mit XmlParser in Groovy

def xml = ''' 
<site id='myCoolSite'> 
    <pages/> 
    <templates/> 
    <properties> 
    <property name='good' value='true'/> 
    <property name='nice' value='true'/> 
    <property name='expensive' value='false'/> 
    </properties> 
    <stuff/> 
</site> 
''' 

site = new XmlParser().parseText(xml) 
assert site != null 

assert site.properties.property instanceof NodeList 
assert site.properties.property.size() == 3 

def newNode = new Node(null, "property", [name: "foo", value: "bar"]) 

site.properties.property.add(0, newNode) 

def foo = site.properties.property.find { [email protected] == "foo" } 

if (foo == null) { 
    println "ADD FAILED. Here are the only properties found: " 
    site.properties.property.each { println "${[email protected]}=${[email protected]}" } 
} 
else { 
    println "SUCCESS" 
} 

Antwort

0

Es funktioniert, wenn Sie es mit den Kindern properties statt der property Knoten-Liste hinzufügen. Dh Änderung:

site.properties.property.add(0, newNode) 

Um

site.properties[0].children().add(0, newNode)