2017-02-17 6 views
0

zur Zeit arbeite ich an XML ändern Aufgabe in meinem Projekt für, dass ich aus dem Quellcode XML-Elemente will, ist mein XML folgt ändern:Wie kann ich den Wert eines XML-Elements basierend auf einem anderen Element in Java ändern?

<Client_list> 
     <Description> 
      <ip>192.168.11.206</ip> 
      <name>vishal suhagiya</name> 
     </Description> 
     <Description> 
      <ip>192.168.11.205</ip> 
      <name>kinnari jasoliya</name> 
     </Description> 
</Client_list> 

Ich schrieb in Java wie:

for (int i = 0; i < nodes.getLength(); i++) { 
    Element Description = (Element)nodes.item(i); 
        Node element = nodes.item(i); 


    Element ip = (Element)Description.getElementsByTagName("ip_address").item(0); 
    String pName = ip.getTextContent(); 

    String Client = jTextField4.getText(); 

    if (pName.equals(Client)) { 

     if("Name".equals(element.getNodeName())) 
     { 
      element.setTextContent(jTextField4.getText()); 
     } 

    } 

Ich brauche das, wenn ich den Namen von 192.168.11.205's ändern möchte, wie kann ich dann ändern? Also, wie kann ich Name in XML basierend auf IP-Adresse ändern

Antwort

0

Ich verwende Xpath, um diese Art von Updates zu verwalten.

XPath xpath = XPathFactory.newInstance().newXPath(); 

    try { 
     NodeList nodes = (NodeList) xpath.evaluate("//Description[ip='192.168.11.205']/name", doc, XPathConstants.NODESET); 
     for(int i=0;i<nodes.getLength();i++){ 
      Element nameElement = (Element) nodes.item(i); 
      nameElement.setTextContent("NewValue"); 
     } 
    } catch (XPathExpressionException e) { 
     // Some error management here 
    } 

Wenn Sie XML-Dokumente als Java-Objekte verwalten müssen Sie möglicherweise zu einem JAXB tutorial einen Blick haben.

+0

Thankyou @minus aber es hat nicht funktioniert –

+0

Seltsam, in der Tat ich einen Test haben (mit dem XML-Fragment Sie in Ihrer Frage gestellt) und es funktionierte für mich. Die XML-Quelle verwendet Namespaces? Wenn dies der Fall ist, könnte der XPath ein wenig schwieriger zu schreiben sein. – minus

0

Tun Sie das Ganze in XSLT.

<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:param name="ip"/> 
    <xsl:param name="newName"/> 

    <xsl:template match="*"> 
    <xsl:copy><xsl:apply-templates/></xsl:copy> 
    </xsl:template> 

    <xsl:template match="name[../ip=$ip]"> 
    <name><xsl:value-of select="$newName"/></name> 
    </xsl:template> 
</xsl:transform> 
Verwandte Themen