2011-02-26 28 views
0

我需要解析來自兩個源的xml文件。這兩個xml文件都包含相同的內容,但每個源文件都使用它們自己的模式。這意味着我想從xml文件中提取的值將存儲在不同的元素名稱中,具體取決於文件的來源。解析具有相同內容但基於不同模式的xml文件的最佳實踐

這裏是一個例子 - 假設我只對產品的「名稱」感興趣。

Source 1 
------------------------- 
    <item> 
    <itemname>Camera</itemname> 
    <itemprice>20</itemprice> 
    </item> 

Source 2 
------------------------- 
    <productList> 
    <productName>Camera</productname> 
    <ProductPrice>20</productprice> 
    </productList> 

要分析上面的我都知道XML文件的來源,然後要麼做一個

getElementsByTagName("itemname"); 

getElementsByTagName("productName"); 

我原來的計劃是有一個不同的解析器爲每個源的XML文件,但我想,也許我可以寫一個通用的解析器,如果我指定我需要的元素的路徑。這樣做的好處是我可以處理來自任何源的任何xml文件,而無需修改解析器。

我想要做的是將元素的路徑存儲到屬性文件。即

source1.name="itemname" 
source2.name=productName 

泛型解析器然後將根據我提供的名稱檢索元素。這可能會工作,但我想如果我對多個元素感興趣,通過屬性文件來維護它可能會很麻煩。

有沒有更好的方法來解決上述問題?請注意,我限制的一個限制是目標平臺是JDK 1.4,所以xpath等不起作用。

+2

沒有多字元素名稱這樣的事情。你提供的xml是無效的。 – 2011-02-26 21:03:24

+0

好吧,這只是一個例子... – ziggy 2011-02-26 21:29:58

+1

最好使用一些有效的例子。否則,他們會混淆人羣並分散眼前的問題。 – 2011-02-26 21:59:43

回答

1

理想的解決方案是XPath。無論XML輸入有多不同,您都可以將每個XPath作爲字符串存儲在屬性文件中。有幾個與JDK 1.4兼容的符合XPath的解析器。

+0

嗨,你可以舉一個我可以使用的例子。我想避免必須添加新庫,如果可能的話 – ziggy 2011-02-26 21:35:23

+0

xpath在jdk中可用http://www.roseindia.net/tutorials/xPath/java-xpath.shtml – MeBigFatGuy 2011-02-26 22:03:07

+0

不適用於jdk1.4 - 請參閱我的原文帖子。 這實際上很混亂。根據本網站http://www.esus.com/javaindex/j2se/jdk1.2/jaxp/jaxp.html JAXP包含在JDK 1.4中 – ziggy 2011-02-26 22:13:13

0

如果元素名稱遵循約定(* Name,* Price),則可以使用通配符和XPath編寫通用解析函數。或者,如果它們始終相同,則可以根據標記順序編寫它(您可以在不使用XPath的情況下執行此操作)。

+0

不,他們不遵守會議名稱。事實上,在某些情況下,元素名稱是帶數字的字母數字。 – ziggy 2011-02-26 22:10:54

+0

標籤順序如何? 'rootNode.getChildren()[0] =「name」等。 – eolith 2011-02-26 22:29:24

+0

沒有偶標籤順序。其中之一包含一個包含大量其他信息的標題部分。 – ziggy 2011-02-26 22:38:48