更新XML Document中节点的NamespaceURI

时间:2016-04-04 23:56:52

标签: xml groovy xml-parsing

我有以下代码:

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

以下是一个例子:

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

我使用对象getNamespaceURI()上的方法item.name()获取名称空间URI。目前,我该如何更新该属性。

如果我打印出item.name()的属性,则包括:

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

1 个答案:

答案 0 :(得分:0)

在早些时候早上与我的队友讨论这个问题,我们找到了解决方案。要更新名称空间,可以使用replaceNode方法。解决方案的详细信息如下:

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)))

上面的快照旨在更新xml文档中找到的节点的命名空间。然后,将更改保存回文件。