2017-02-17 11 views
0

В настоящее время я работаю над XML изменить задачу в моем проекте для этого я хочу изменить XML-элемент из исходного кода ниже мой XML:Как изменить значение элемента XML на основе другого элемента в java?

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

Я написал в Java, как:

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

    } 

Мне нужно, чтобы, если я хочу изменить имя 192.168.11.205, то как я могу изменить? Так как я могу изменить имя в XML на основе ip-адреса

ответ

0

Я использую xpath для управления такими обновлениями.

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 
    } 

Если вам нужно управлять XML-документы в качестве объектов ява вы можете захотеть, чтобы посмотреть на JAXB tutorial.

+0

Thankyou @minus, но это не работает –

+0

Странно, ведь я сделала тест (с фрагментом XML вы положили в вашем вопросе), и он работал на меня. Источник xml использует пространства имен? Если это так, XPath может быть немного сложнее писать. – minus

0

Все это в 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>