Установка значения узла с использованием XPath Java - PullRequest
3 голосов
/ 21 декабря 2011

Я пытаюсь установить значение узла через 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 Ответ

2 голосов
/ 21 декабря 2011

Вы просто меняете значение в памяти, а не в самом файле. Вам необходимо записать измененный документ обратно в файл:

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

...