gpt4 book ai didi

java - 执行 XML 转换的最有效方法 - Java

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:57 24 4
gpt4 key购买 nike

我是 Java 新手,我想为社区提供意见。我有一个巨大的 XML,其中包含大量信息。实际上,该 XML 包含大约 140Mb 的信息。在这个XML中,我有很多不再有效的信息,所以我需要进行过滤并仅使用有效的信息,为了检查这一点,我需要在节点之间交叉信息,以检查是否需要删除。在某些情况下,需要删除整个父(主)节点。

我已经使用 dom 解析、使用循环来完成此操作,在我保存在变量中的循环内并交叉信息进行检查,并删除实际节点或整个父节点。

基本上,结构是这样的:

<source>
<main>
<id>98567</id>
<block_information>
<name>Block A</name>
<start_date>20120210</start_date>
<end_date>20150210</end_date>
</block_information>
<block_information>
<name>Block A.01</name>
<start_date>20150210</start_date>
<end_date>20251005</end_date>
</block_information>
<city_information>
<name>Manchester</name>
<start_date>20150210</start_date>
<end_date>20150212</end_date>
</city_information>
<city_information>
<name>New Manchester</name>
<start_date>20150212</start_date>
<end_date>20251005</end_date>
</city_information>
<phone>
<type>C</type>
<number>987466321</number>
<name></name>
</phone>
<phone>
<type>P</type>
<number>36547821</number>
<name></name>
</phone>
</main>
<main>
<id>19587</id>
<block_information>
<name>Che</name>
<start_date>20090210</start_date>
<end_date>20100210</end_date>
</block_information>
<block_information>
<name></name>
<start_date>20100210</start_date>
<end_date>20351005</end_date>
</block_information>
<city_information>
<name></name>
<start_date>20150210</start_date>
<end_date>20150212</end_date>
</city_information>
<city_information>
<name>No Name</name>
<start_date>20150212</start_date>
<end_date>20191005</end_date>
</city_information>
<phone>
<type>C</type>
<number>987466321</number>
<name>Mom</name>
</phone>
<phone>
<type>P</type>
<number>36547821</number>
<name></name>
</phone>
</main>
</source>

输出如下:

<result>
<main>
<id>98567</id>
<block_name>Block A.01</block_name>
<city_name>New Manchester</city_name>
<cellphone></cellphone>
<phone>36547821</phone>
<contact_phone></contact_phone>
<contact_phone_name></contact_phone_name>
</main>
</result>

对于结果中输出的信息,必须有一个 <block_information><city_information>有效( <start_date> 小于实际日期且 <end_date> 大于实际日期),并且 <name...>两者都需要。如果没有或多个有效,则 <main>将被删除。

对于电话号码,<type> [“C”代表联系人,“P”代表个人电话,“M”代表手机]。所以如果<type>是“C”,但 <name> 中没有值电话打不通结果。 “P”转到<phone>和“M”转到<cellphone> .

我希望您考虑什么是以最具绩效的方式做到这一点的最佳方法,并且如果需要的话,任何人都可以以简单的方式进行调整。

提前感谢您的投入!

按照 @kjhughes 的要求,我在示例 XML 上放置了一些值,以及我需要执行的一些过滤器。谢谢!

ps.:作为示例的 XML 结构与实际相比过于简单,还有很多更复杂的类型。

最佳答案

我会采用以下方法:

  • 找到一个库,可以让您流式传输 xml(文件或输入流)并生成 Stream<Main>
  • 处理Stream<Main>并过滤每个 Main根据您的验证逻辑节点
  • 根据您是否存在 I/O 或 CPU 瓶颈,请使用 .parallel() Stream 来处理流(阅读:测试 .parallel() 是否能以任何方式帮助您)

这足以满足 XML 解析上下文中任何合理的性能要求(我猜?)。谷歌 Java XML Stream然后从那里开始(或者也许this stackoverflow问题可以给出一些指示)

关于java - 执行 XML 转换的最有效方法 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com