java - 使用 XPath Java 设置节点值

标签 java xpath xmlnode

我正在尝试通过 XPath 设置节点值。我有以下但它似乎并没有改变实际的文件值。

XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();

xPathExpression = "//test";
xPathValue= "111";

NodeList nodes = (NodeList) xPath.evaluate(xPathExpression, new InputSource(new FileReader(fileName)), XPathConstants.NODESET);

for (int k = 0; i < nodes.getLength(); i++)
{
    System.out.println(nodes.item(k).getTextContent());  // Prints original value
    nodes.item(k).setTextContent(xPathValue);
    System.out.println(nodes.item(k).getTextContent());  // Prints 111 after
}

但是该节点的文件内容保持不变。

如何设置该节点的值?

谢谢

最佳答案

您只是在更改内存中的值,而不是文件本身的值。您需要将修改后的文档写回到文件中:

Source source = new DOMSource(doc);
Result result = new StreamResult(new File(fileName));
Transformer xformer;
try {
    xformer = TransformerFactory.newInstance().newTransformer();
    xformer.transform(source, result);
} catch (TransformerConfigurationException e) {
    // TODO Auto-generated catch block
} catch (TransformerFactoryConfigurationError e) {
    // TODO Auto-generated catch block
} catch (TransformerException e) {
    // TODO Auto-generated catch block
}

这些类都来自javax.xml.transform.*

(当然,您需要保存对文档的引用,以便您可以写回它(即您将无法继续将其直接传递给 evaluate) ).

关于java - 使用 XPath Java 设置节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583080/

相关文章:

java - 如何以编程方式添加 map fragment

php - 使用 xpath 和 DOMDocument 检索元素

c# - 如何在 C# 中比较 XmlDocument 的两个 XmlNode?

c# - 通过多级属性值选择 XML 节点值

java - 如何使用主类中的方法从嵌套类返回泛型类型

java - Mybatis Spring多数据库Java配置

php - XPath:获取最近的标题元素(h1、h2、h3 等)

python - 如何使用 xml 中的 xpath 访问其他标签深处的标签?

c# - 将 XmlNode 添加到 XmlElement

java - 在 Websphere 上无法部署