2017-07-03 1 views
1

Mon exigence consiste à mettre à jour reloadable = "true" à reloadable = "false". Le code ci-dessous fonctionne parfaitement, mais il ne met pas à jour l'attribut qui se trouve dans la section des commentaires. Je sais que la fonction commentaire() ferait, mais vraiment pas de chance jusqu'à maintenant, ci-dessous est par codeComment modifier la valeur d'attribut en XML à l'aide de Xpath Java, y compris commenté Section

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; 

Ci-dessous le 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

Veuillez fournir un petit extrait de xml sur lequel vous travaillez et quel attribut vous voulez remplacer. – SomeDude

+0

@svasa J'ai mis à jour. Merci –

+0

Avez-vous trouvé la réponse ci-dessous? Merci. – SomeDude

Répondre

0

Vous pouvez détecter si le noeud est un COMMENT_NODE et voir si ses données commencent avec <Context et remplacer reloadable=true avec reloadable=false comme dans le code ci-dessous:

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