1

我需要使用 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);         
    }
4

1 回答 1

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

我没有尝试过完全运行您的代码,但它应该可以工作。

于 2012-11-20T13:32:44.577 回答