2016-08-20 60 views
-2

的我編輯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> 

你可以看到,在每一個「項目」的元素,有一個元素「打折」。我想將所有元素「折扣」改爲「條件」,並使用「新」作爲內容。例如:

前:

<discount>10.00%</discount> 

後:

<condition>new</condition> 

對於元素的重命名,我可以簡單地使用任何文本編輯器的查找&替換功能。但是,對於元素內容,由於有數千個不同的值(例如10%/ 20%/ 23%/等),所以我找不到將它們全部更改爲「新」值的方法。

我應該使用任何想法或工具來進行此類編輯?

謝謝。

+0

你可以使用一種編程語言,你所熟悉和XML解析庫在編程語言。看看你的個人資料,PHP將是一個可行的選擇 - 它的XML庫與其他任何網站一樣瘋狂,在網絡上有很多例子,並且獲得結果相對容易。 –

+1

您也可以考慮[XSLT](http://www.w3.org/Style/XSL/)專用於操縱/轉換XML文件的專用語言。大多數通用語言 - Java,PHP,Python,VB--都有庫來運行XSLT 1.0腳本。然後有像[Saxon和Xalan](http://stackoverflow.com/tags/xslt/info)這樣的專用引擎可以運行2.0甚至3.0腳本。 – Parfait

+0

這簡直就是<20行代碼..很快看到我的提交 –

回答

0

其實這是在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"); 
    } 
}