2017-02-17 89 views
0

目前我工作的XML修改任務在我的項目,我想改變從下面的源代碼,XML元素是我的XML:如何根據java中的另一個元素更改XML元素的值?

<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的名字,那我該怎麼改? 那麼如何根據IP地址更改XML中的名稱

回答

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文檔作爲Java對象,你可能想看看一個JAXB tutorial

+0

三江源@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> 
相關問題