编辑数千个XML数据

时间:2016-08-20 22:03:53

标签: xml

我正在编辑像这样的xml文件:

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Test Store</title>
    <link>http://www.example.com</link>
    <description>An example item from the feed</description>

    <item>
      <id>DB_1</id>
      <title>Diamond Ring</title>
      <description>The Most Beautiful Diamond Ring</description>
      <google_product_category>Accessories</google_product_category>
      <product_type>Rings</product_type>
      <link>http://www.example.com/rings</link>
      <image_link>http://www.example.com/ring.jpg</image_link>
      <condition>new</condition>
      <availability>in stock</availability>
      <discount>10.00%</discount>
      <price>1490.0</price>
      <brand>ABC</brand>
      <item_group_id>GROUP_1</item_group_id>
    </item>

    <item>
      <id>DB_2</id>
      <title>Gold Ring</title>
      <description>Pretty Gold Ring</description>
      <google_product_category>Accessories</google_product_category>
      <product_type>Rings</product_type>
      <link>http://www.example.com/gold-rings</link>
      <image_link>http://www.example.com/gold-ring.jpg</image_link>
      <condition>new</condition>
      <availability>in stock</availability>
      <discount>20.00%</discount>
      <price>500.0</price>
      <brand>ABC</brand>
      <item_group_id>GROUP_2</item_group_id>
   </item>

 </channel>
</rss>

你可以看到在每个“item”元素中都有一个元素“discount”。我想将所有元素“折扣”改为“条件”,并使用“新”作为内容。例如:

在:

<discount>10.00%</discount>

后:

<condition>new</condition>

对于元素的重命名,我可以简单地使用find&amp;替换任何文本编辑器的功能。但是,对于元素内容,由于有数千个不同的值(例如10%/ 20%/ 23%/等),我找不到将所有值更改为值“new”的方法。

我应该使用任何想法或工具进行编辑吗?

感谢。

1 个答案:

答案 0 :(得分:0)

实际上在java中只有10多行,包含XPath和vtd-xml ......这里是代码

import com.ximpleware.*;
import java.io.*;

public class replaceElements2 {

    public static void main(String[] s) throws VTDException,IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("d:\\xml\\rss.xml", false)){
            System.out.println("parsing error");
            return;
        }
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        XMLModifier xm = new XMLModifier(vn);
        ap.selectXPath("/rss/channel/item/discount");
        int i=0;
        byte[] ba="<condition>new</condition>".getBytes();
        while((i=ap.evalXPath())!=-1){
            xm.remove();
            xm.insertAfterElement(ba);
        }
        xm.output("d:\\xml\\rss_new.xml");
    }
}