如何根据java中的另一个元素更改XML元素的值?

时间:2017-02-17 10:38:23

标签: java xml dom

目前我在我的项目中处理XML修改任务,因为我想从下面的源代码更改xml元素是我的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中的名称

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>