解析具有相同内容但基于不同模式的xml文件的最佳实践

时间:2011-02-26 20:58:32

标签: java xml xml-parsing

我需要从两个来源解析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 个答案:

答案 0 :(得分:1)

理想的解决方案是XPath。无论XML输入有多么不同,您都可以将每个XPath存储为属性文件中的字符串。有几个兼容XPath的解析器可以与JDK 1.4一起使用。

答案 1 :(得分:0)

如果元素名称遵循约定(* Name,* Price),则可以使用通配符和XPath编写通用解析函数。或者你可以根据标签顺序编写它,如果它们总是相同的(你可以在没有XPath的情况下这样做)。