我有以下代码:
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]
答案 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文档中找到的节点的命名空间。然后,将更改保存回文件。