2017-07-03 96 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);