如何使用 XPath 和 Java 更新 XML

2022-09-01 11:46:45

我有一个XML文档,以及该文档的XPath表达式。我必须在运行时使用XPath更新文档。

我如何使用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>

我必须更改以下的姓名和年龄值。//PersonList/Person[2]/Name


答案 1

用。首先,获取一个 NodeList,例如:setNodeValue

myNodeList = (NodeList) xpath.compile("//MyXPath/text()")
           .evaluate(myXmlDoc, XPathConstants.NODESET);

然后设置例如第一个节点的值:

myNodeList.item(0).setNodeValue("Hi mom!");

更多示例,例如此处

正如此处的另外两个答案以及您上一个问题中提到的:从技术上讲,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


答案 2

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

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

推荐