2017-07-03 63 views
1

我的要求是將reloadable =「true」更新爲reloadable =「false」。下面的代碼是完美的,但它並沒有更新註釋部分中的屬性。 我知道評論()函數會做,但真的到現在爲止沒有運氣,下面是代碼如何使用Xpath修改XML中的屬性值Java包括註釋部分

NodeList contextRoots = XMLUtil.xPathNodeList("//*[contains(@reloadable, 'true')]", ServerXML.getDocumentElement()); 
      for(int id = 0; id < contextRoots.getLength(); id++) 
      { 
       Node value = contextRoots.item(id).getAttributes().getNamedItem("reloadable"); 
       String val = value.getNodeValue(); 
       value.setNodeValue(val.replaceAll("true", "false")); 
      } 
      return ServerXML; 

下面是XML

<Context docBase="/UserManager" path="" reloadable="true"/> 
    <Context docBase="/UserManager" path="" reloadable="true"/> 

    <Context docBase="/AdminConsole" path="" reloadable="true"/> 
    <Context docBase="/AdminConsole" path="" reloadable="true"/> 

    <Context docBase="/public#cert" path="" reloadable="true"/> 
    <Context docBase="/public#cert" path="" reloadable="true"/> 

    <!-- Remove below comment block if CQI is installed--> 
    <!-- <Context docBase="CQI" path="" reloadable="true" /> 
    <Context docBase="CQI" path="" reloadable="true" /> --> 
+0

請提供您正在處理的xml的簡短片段以及您要替換的屬性。 – SomeDude

+0

@svasa我已更新。謝謝 –

+0

下面的答案是否有效?謝謝。 – SomeDude

回答

0

如果節點是你可以檢測一個COMMENT_NODE,看它的數據是否以<Context開頭,並用reloadable=false替換reloadable=true,如下面的代碼所示:

InputSource inputSource = new InputSource(new FileInputStream(new File("commentupdate.xml") )); 

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setNamespaceAware(true); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(inputSource); 
NodeList nodeList = doc.getDocumentElement().getChildNodes(); 
for (int i = 0; i < nodeList.getLength(); i++) 
{ 
    if (nodeList.item(i).getNodeType() == Element.COMMENT_NODE) 
    { 
     Comment comment=(Comment) nodeList.item(i); 
     String data = comment.getData(); 
     if (data.trim().startsWith("<Context")) 
     { 
      data = data.replaceAll("reloadable\\s*=\\s*\"true\"", "reloadable=\"false\""); 
      Comment newComment = doc.createComment(data); 
      comment.getParentNode().appendChild(newComment); 
      comment.getParentNode().removeChild(comment); 
     } 

    } 
} 

TransformerFactory tf = TransformerFactory.newInstance(); 
Transformer transformer = tf.newTransformer(); 
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "true"); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
StreamResult sr = new StreamResult(new File("commentupdate.xml"));    
transformer.transform(new DOMSource(doc), sr);