我有一个XML文档,以及该文档的XPath表达式.我必须在运行时使用XPath来更新doc.
我怎么能用Java做到这一点?
以下是我的xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<PersonList>
<Person>
<Name>Sonu Kapoor</Name>
<Age>24</Age>
<Gender>M</Gender>
<PostalCode>54879</PostalCode>
</Person>
<Person>
<Name>Jasmin</Name>
<Age>28</Age>
<Gender>F</Gender>
<PostalCode>78745</PostalCode>
</Person>
<Person>
<Name>Josef</Name>
<Age>232</Age>
<Gender>F</Gender>
<PostalCode>53454</PostalCode>
</Person>
</PersonList>
Run Code Online (Sandbox Code Playgroud)
我必须更改名称和年龄的值//PersonList/Person[2]/Name.
Jea*_*ett 29
使用setNodeValue.首先,获取NodeList,例如:
myNodeList = (NodeList) xpath.compile("//MyXPath/text()")
.evaluate(myXmlDoc, XPathConstants.NODESET);
Run Code Online (Sandbox Code Playgroud)
然后设置例如第一个节点的值:
myNodeList.item(0).setNodeValue("Hi mom!");
Run Code Online (Sandbox Code Playgroud)
更多例子,例如这里.
正如此处的其他两个答案以及之前的问题所述:从技术上讲,XPath不是"更新"XML文档的方法,而只是在XML文档中定位节点.但我认为以上就是你想要的.
编辑:回复你的评论...你是否在编辑完DOM后询问如何将DOM 写入 XML文件?如果是这样,这里有两个如何做的例子:
http://www.java2s.com/Code/Java/XML/WriteDOMout.htm
http://download.oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT4.html
您可以删除文件并创建一个新文件。
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
new InputSource("data.xml"));
XPath xpath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) xpath.evaluate("//employee/name[text()='old']", doc,
XPathConstants.NODESET);
for (int idx = 0; idx < nodes.getLength(); idx++) {
nodes.item(idx).setTextContent("new value");
}
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(new DOMSource(doc), new StreamResult(new File("data_new.xml")));
Run Code Online (Sandbox Code Playgroud)