2017-02-17 87 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> 
相关问题