【问题标题】:Duplicate the content of the element in a XML file using JAVA使用 JAVA 在 XML 文件中复制元素的内容
【发布时间】:2021-03-14 02:26:04
【问题描述】:

认为这是 xml 文件

<rpc>
<edit-config>
<config>
<element>
<name> user%index%</name>
<place> wakanda </palce>
<count> number%index%</count>
</element>
</config>
</edit-config>
</rpc>

我需要将元素属性单独复制 5 次,其中我将 %index% 替换为值 1 到 5,因此输出如下所示,我需要相同的 java 代码请帮助我。

<rpc>
<edit-config>
<config>
<element>
<name> user1</name>
<place> wakanda </palce>
<count> number1</count>
</element>
<element>
<name> user2</name>
<place> wakanda </palce>
<count> number2</count>
</element>
<element>
<name> user3</name>
<place> wakanda </palce>
<count> number3</count>
</element>
<element>
<name> user4</name>
<place> wakanda </palce>
<count> number4</count>
</element>
<element>
<name> user5</name>
<place> wakanda </palce>
<count> number5</count>
</element>
</config>
</edit-config>
</rpc>

【问题讨论】:

    标签: java xml dom xml-parsing


    【解决方案1】:

    我想最简单的方法之一是创建一个简单的 for 循环 多次复制内容并使用 String.replace 方法将“%index%”替换为您想要的值。

    String.replace Javadoc

    【讨论】:

      【解决方案2】:

      我以前也遇到过类似的情况。我把之前的工作整理了一下,作为外部jar/开源放到了github上。 https://github.com/tataelm/XmlNodeCloner

      如何使用?

      XmlNodeCloner xmlNodeCloner = new XmlNodeCloner("src/input.xml", "element", 2);
      xmlNodeCloner.setIfCloneLatestOrCertain(true);
      xmlNodeCloner.selectCloningElementByTagValue("name", "user1");
      xmlNodeCloner.addXmlTagsToEnumerate("name","count");    
      xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);
      xmlNodeCloner.isAlreadyIterated(true);
      xmlNodeCloner.runCloner();
      

      使用 3 个参数创建一个 XmlNodeCloner 实例。

      1. xmlPath: 给出你的 xml 文件的路径
      2. elementName:给出要克隆的元素名称。在你的情况下:“元素”
      3. cloneCount:是一个整数值。您希望从该元素中获得多少个克隆

      如果要克隆某个节点,请确保调用以下方法。默认是克隆最新的节点

      xmlNodeCloner.setIfCloneLatestOrCertain(true);
      xmlNodeCloner.selectCloningElementByTagValue("name", "user1");
      

      如果要枚举某些节点,请调用以下方法。参数是要枚举的节点名称

      xmlNodeCloner.addXmlTagsToEnumerate("name","count");    
      xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);
      

      如果您要克隆/复制的节点已经迭代一次,它将具有迭代次数。如果您想从上一次迭代继续,请调用以下方法

      xmlNodeCloner.isAlreadyIterated(true);
      

      在 enum 中定义了 5 种不同的枚举风格。您可以通过以下方式调用这些样式。

      xmlNodeCloner.setmEnumeratorStyle(EnumeratorStyle.DEFAULT);
      
      public enum EnumeratorStyle {
          DEFAULT, DASH, SPACE_DASH_SPACE, UNDERSCORE, SPACE_UNDERSCORE_SPACE
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多