解析具有相同内容但基于不同架构的 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 文件的源,然后执行 a
getElementsByTagName("itemname");
或
getElementsByTagName("productName");
我最初的计划是为每个源的 xml 文件使用不同的解析器,但我想如果我指定,也许我可以编写一个通用解析器我需要的元素的路径。这样做的好处是我可以处理来自任何来源的任何 xml 文件,而无需修改解析器。
我正在考虑做的是将元素的路径存储到属性文件中。即
source1.name="itemname"
source2.name=productName
通用解析器将根据我提供的名称检索元素。这可能会起作用,但我认为如果我对多个元素感兴趣,通过属性文件维护它可能会很麻烦。
有没有更好的方法来解决以上问题呢?请注意,我受到的一个限制是目标平台是 JDK 1.4,因此 xpath 等将无法工作。
I need to parse xml files from two sources. Both xml files contain the same content but each source uses their own schemas. This means the values that i want to extract from the xml file will be stored in different element names depending on the source of the file.
Here is an example - Assume i am only interested in the "name" of a product.
Source 1
-------------------------
<item>
<itemname>Camera</itemname>
<itemprice>20</itemprice>
</item>
Source 2
-------------------------
<productList>
<productName>Camera</productname>
<ProductPrice>20</productprice>
</productList>
To parse the above i have to know the source of the xml file and then either do a
getElementsByTagName("itemname");
or
getElementsByTagName("productName");
My original plan was to have a different parser for each source's xml file but i am thinking that maybe i could write a generic parser if i specify the path to the element i need. The benefit of this is that i can then process any xml file from any source without having to modify the parser.
What i am thinking of doing is to store the path to the element on to a properties file. i.e.
source1.name="itemname"
source2.name=productName
The generic parser would then just retrieve the element based on the name i provide it. This will probably work but i am thinking that if i am interested in more than one element it might be cumbersome to maintain it via a properties file.
Is there a better way to resolve the above? Please note that One restriction that i am limited to is that the target platform for this is JDK 1.4 so xpath etc would not work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
理想的解决方案是 XPath。无论 XML 输入有多么不同,您都可以将每个 XML 输入的 XPath 作为字符串存储在属性文件中。有几个与 JDK 1.4 一起使用的 XPath 兼容解析器。
The ideal solution is XPath. No matter how different the XML inputs are, you can store an XPath for each as a string in a properties file. There are several XPath-compliant parsers that work with JDK 1.4.
如果元素名称遵循约定(*Name、*Price),您可以使用通配符和 XPath 编写通用解析函数。或者,如果标签顺序始终相同,您可以根据标签顺序编写它(您可以在没有 XPath 的情况下执行此操作)。
If element names follow a convention (*Name, *Price), you could write a generic parsing function using wildcards and XPath. Or you could write it based on tag orders if they are always the same (you can do this without XPath).