2017-07-03 6 views
1

Meine Anforderung aktualisiert reloadable = "true" auf reloadable = "false". Der folgende Code funktioniert perfekt, aktualisiert jedoch nicht das Attribut, das sich im Kommentarabschnitt befindet. Ich weiß, dass comment() Funktion tun würde, aber jetzt wirklich kein Glück, bis, ist unten durch CodeSo ändern Sie den Attributwert in XML mit Xpath Java, einschließlich kommentierter Abschnitt

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; 

unten ist die 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

Bitte geben Sie ein kurzes XML-Snippet an, an dem Sie gerade arbeiten und welches Attribut Sie ersetzen möchten. – SomeDude

+0

@svasa Ich habe aktualisiert. Danke –

+0

Hat die Antwort unten funktioniert? Vielen Dank. – SomeDude

Antwort

0

Sie erkennen können, wenn Knoten a COMMENT_NODE und sehen, ob es Daten beginnt mit <Context und ersetzen reloadable=true durch reloadable=false wie in der folgenden Code:

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