我需要在Java中使用xpath编辑XML文件中的常规节点。 我尝试了许多不同的方法和方法,但成功完成了这项任务。 请协助,下面的代码中提到的有问题的部分。
我使用的xml文件示例:
<data-source> <account-id>1102</account-id> <type>ftp</type> <url>http://a.b.com</url> <port>21</port> <username>user</username> <password>12345678</password> <update-frequency>1200</update-frequency> </data-source>
我的功能如下,参数:
* Usage example: updateElementValue(FILE_LOCATION + "addDataSource.xml", "/data-source", "port", "80")
* @param fileNameToUpdate - full file name (path + file name) to update
* @param xpath - element node xpath
* @param elementName - element name
* @param elementValue - value to set
public static void updateElementValue(String fileNameToUpdate, String xpath, String elementName, String elementValue) throws Exception
{
// Exit with exception in case value is null
if(elementValue == null) {
throw new Exception("Update element Value function, elementValue to set is null");
}
//Read the file as doc
File fileToUpdate = new File(fileNameToUpdate);
Document doc = FileUtils.readDocumentFromFile(fileToUpdate);
//WHAT SHOULD I DO HERE?...
//Save the doc back to the file
FileUtil.saveDocumentToFile(doc, fileNameToUpdate);
}
答案 0 :(得分:2)
如果我理解正确,您将不需要elementName
,因为XPath应该唯一地标识节点。使用javax.xml.xpath
包...
XPathFactory xfactory = XPathFactory.newInstance();
XPath xpathObj = xfactory.newXPath();
Node node;
try {
node = (Node)xpathObj.evaluate(xpath, doc, XPathConstants.NODE);
} catch (XPathExpressionException e) {
throw new RuntimeException(e);
}
node.setTextContent(elementValue);
我没有尝试过准确地运行您的代码,但它应该可以正常工作。