2016-04-04 9 views
0

Ich habe das folgende Stück Code:Update NamespaceURI von Knoten im XML-Dokument

root = parser.parse(xmldoc) 
Node item = root.children().find { it.name().getLocalPart() == element } 
if (item) { 
    // update namespace uri 
} 

Im Folgenden ein Beispiel:

<ct:Description xmlns:ct="http://somewhere.com">Semi-mechanistic modelling of the tumour growth inhibitory effects of LY2157299</ct:Description> 

ich die Namespace-URI erhalten mit der Methode getNamespaceURI() auf dem Objekt item.name() . Wie kann ich diese Eigenschaft vorläufig aktualisieren?

Wenn ich item.name() ‚s Eigenschaften ausdrucken, schließen sie ein:

[localPart:Description, class:class groovy.xml.QName, qualifiedName:ct:Description, prefix:ct, namespaceURI:http://somewhere.com] 

Antwort

0

auf diese Diskussion mit meinem Teamkollegen in diesem früheren Morgen haben wir eine Lösung gefunden. Um den Namespace zu aktualisieren, können Sie die Methode replaceNode verwenden. Details der Lösung werden wie folgt auf:

import groovy.xml.QName 
import groovy.xml.XmlUtil 
import javax.xml.parsers.ParserConfigurationException 
import org.xml.sax.SAXException 
import java.util.concurrent.ThreadLocalRandom as R 

File f = new File("/tmp/test.xml") 
f.exists() 

String elem = "Description" 
int count = R.current().nextInt(0, Integer.MAX_VALUE) 
String value = "my example value ${count}" 
String elemNs = "http://www.somewhere.else/oldns" 
String newElemNs = "http://www.somewhere.else/newns" 

XmlParser parser = new XmlParser(false, true) 
def root = parser.parse(f) 
Node item = root.children().find { it.name().getLocalPart() == elem } 
item.name = new QName(newElemNs, item.name().getLocalPart(),item.name().getPrefix()) 
XmlUtil.serialize(root, new BufferedWriter(new FileWriter(f))) 

Der Snapshot oben soll den Namensraum des Knotens im XML-Dokument gefunden aktualisieren. Speichern Sie die Änderung anschließend in der Datei.

Verwandte Themen