使用 XPath Java 设置节点值

Posted

技术标签:

【中文标题】使用 XPath Java 设置节点值【英文标题】:Setting node value using XPath Java 【发布时间】:2011-12-20 22:59:30 【问题描述】:

我正在尝试通过 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

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

如何设置该节点的值?

谢谢

【问题讨论】:

【参考方案1】:

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

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)。

【讨论】:

以上是关于使用 XPath Java 设置节点值的主要内容,如果未能解决你的问题,请参考以下文章

XPath 1.0:使用当前节点的父节点的属性值来寻找另一个匹配的节点

如何使用 XPath 获取节点值/innerHTML?

使用 XPath,如何根据节点的文本内容和属性值来选择节点?

使用 xpath 从最新节点中提取元素值

使用xpath从xml获取子节点值

使用 XPath 更改文本内容