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

If I understand correctly, you wont need elementName, as the XPath should identify a node uniquely. Use the javax.xml.xpath package...

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

I haven't tried running your code exactly, but it should work.

于 2012-11-20T13:32:44.577 に答える