如何使用XPath和Java更新XML

sam*_*ash 24 java xml xpath

我有一个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


Sor*_*ter 6

您可以删除文件并创建一个新文件。

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)