【问题标题】:How can I change value of XML element based on another element in java?java - 如何根据java中的另一个元素更改XML元素的值?
【发布时间】:2017-02-17 10:38:23
【问题描述】:

目前我正在我的项目中处理 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 中的名称

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我使用 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

      【讨论】:

      • 奇怪,事实上我做了一个测试(使用你在问题中输入的 XML 片段),它对我有用。 xml 源使用命名空间?如果是这样,编写 XPath 可能会有点棘手。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多