使用Java中的xpath编辑XML文件中的常规节点

时间:2012-11-20 13:17:57

标签: java xml xpath xml-parsing

我需要在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);         
    }

1 个答案:

答案 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);

我没有尝试过准确地运行您的代码,但它应该可以正常工作。