编辑成千上万的XML数据
我正在编辑一个xml文件,如下所示:编辑成千上万的XML数据,xml,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</descript
<?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>
测试库
http://www.example.com
提要中的一个示例项
DB_1
钻戒
最漂亮的钻石戒指
配件
戒指
http://www.example.com/rings
http://www.example.com/ring.jpg
新的
有现货的
10.00%
1490
基础知识
第1组
DB_2
金戒指
漂亮的金戒指
配件
戒指
http://www.example.com/gold-rings
http://www.example.com/gold-ring.jpg
新的
有现货的
20.00%
500
基础知识
第2组
您可以看到,在每个“item”元素中,都有一个元素“折扣”。我想将所有元素“折扣”更改为“条件”,并使用“新”作为内容。例如:
之前:
<discount>10.00%</discount>
10.00%
之后:
<condition>new</condition>
新建
对于元素的重命名,我可以简单地使用任何文本编辑器的find&replace函数。但是,对于元素含量,由于有数千个不同的值(例如10%/20%/23%/等),我无法找到一种方法将它们全部更改为“新”值
我应该使用什么想法或工具来进行编辑
谢谢。实际上,在java中使用XPath和vtd xml只需要10多行。。。这是密码
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");
}
}
导入com.ximpleware.*;
导入java.io.*;
公共类替换元素2{
公共静态void main(字符串[]s)引发VTDException、IOException{
VTDGen vg=新VTDGen();
如果(!vg.parseFile(“d:\\xml\\rss.xml”,false)){
System.out.println(“解析错误”);
返回;
}
VTDNav vn=vg.getNav();
自动驾驶仪ap=新自动驾驶仪(vn);
XMLModifier xm=新的XMLModifier(vn);
ap.选择XPath(“/rss/channel/item/discount”);
int i=0;
byte[]ba=“new”.getBytes();
而((i=ap.evalXPath())!=-1){
xm.remove();
xm.insertAfterElement(ba);
}
输出(“d:\\xml\\rss_new.xml”);
}
}
您可以使用熟悉的编程语言和该编程语言中的XML解析库。查看你的个人资料,PHP将是一个可行的选择——它的XML库和其他任何一个一样疯狂,在“网”上有很多例子,它会比较容易得到结果。你也可以考虑专用于操作/转换XML文件的专用语言。大多数通用语言——Java、PHP、Python、VB——都有运行XSLT1.0脚本的库。还有像这样的专用引擎可以运行2.0甚至3.0脚本