3

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
}

ただし、そのノードのファイルの内容は変更されません。

そのノードの値を設定するにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

ファイル自体ではなく、メモリ内の値を変更しているだけです。変更したドキュメントをファイルに書き戻す必要があります。

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

于 2011-12-20T23:33:34.337 に答える