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

发布于 2024-10-19 12:33:52 字数 1026 浏览 4 评论 0原文

我需要从两个来源解析 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

聊慰 2024-10-26 12:33:52

理想的解决方案是 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.

薄凉少年不暖心 2024-10-26 12:33:52

如果元素名称遵循约定(*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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文