2011-12-20 4 views
3

Я пытаюсь установить значение узла через XPath. У меня есть следующее, но, похоже, это не изменяет фактическое значение файла.Установка значения узла с помощью XPath Java

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 
} 

Но содержимое файла для этого узла остается неизменным.

Как установить значение этого узла?

Благодаря

ответ

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