我正在编辑像这样的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”的方法。
我应该使用任何想法或工具进行编辑吗?
感谢。
答案 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");
}
}