2011-12-20 10 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に直接渡すことはできません))。

関連する問題