java - Dom4j 与 JAXB 比较,用于读取和更新大型复杂的 XML 文件

标签 java xml xml-parsing jaxb dom4j

我有一个具有稳定树结构和超过 5000 个元素的 XML 文件。

部分内容如下:

<Companies>
    <Offices>
        <RevenueInfo>
            <TransactionId>14042015014606877</TransactionId>
            <Company>
                <Identification>
                    <GlobalId>25142400905</GlobalId>
                    <BranchId>373287734</BranchId>
                    <GeoId>874</GeoId>
                    <LastUpdated>2015-04-14T01:46:06.940</LastUpdated>
                    <RecordType>7785</RecordType>
                </Identification>
                <Info>
                    <DataEntry>
                        <EntryId>12345</EntryId>
                    </DataEntry>
                    <DataEntry>
                        <EntryId>34567</EntryId>
                    </DataEntry>
                    <DataEntry>
                        <EntryId>89076</EntryId>
                    </DataEntry>
                    <DataEntry>
                        <EntryId>13211</EntryId>
                    </DataEntry>
                </Info>

                ...more elements

            </Company>
        </RevenueInfo>
    </Offices>
</Companies>

我需要能够根据用户输入更新文档中的任何值,并使用更新后的信息创建一个新的 XML 文件。用户将传递 BranchId、要更新的元素的名称以及它的顺序号(如果元素多次出现)(例如,对于 EntryId 12345,用户将传递 373287734 EntryId=1 010101 )

我一直在研究 JAXB,但为这种 XML 创建模型类似乎需要付出相当大的努力,但它似乎也可以使打印到文件和定位要更新的元素变得更加容易。

Dom4j 似乎也有不错的性能结果,但不确定解析如何。

我的问题是,在这种情况下,JAXB 是最好的方法吗?或者您能否建议一种更好的方法来解析这种类型的 XML?

最佳答案

根据我的经验,JAXB 只有在模式简单且稳定时才能正常工作。在其他情况下,您最好使用通用树模型。 Java 世界中的主要泛型模型有 DOM、JDOM2、DOM4J、XOM、AXIOM。我自己的偏好是 JDOM2 和 XOM; DOM4J 在我看来过于复杂,而且有些过时。但这取决于您在寻找什么。

但是,您描述的应用程序看起来是“XML 端到端”或 XRX 方法的理想候选者 - XForms、XSLT、XQuery、XProc。您根本不需要 Java。

关于java - Dom4j 与 JAXB 比较,用于读取和更新大型复杂的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976824/

相关文章:

java - Spring : Do I require to define separate TransactionManager for 2 data sources?

xml - SAML 响应 xml 无效

c# - 从 SQL 查询 c# 创建树/XML 结构

php - 如何解析具有ns2元素的xml

java - SAXParser - 从 XML 元素解码值后仅获得字符长度 126

java - java中返回相同的公共(public)IP地址

java - Gurobi 800,Java,检索变量数量返回零

java - 使用正则表达式java查找两个连续的单词/字符串(包括标点符号)

c# - XDocument 加载到 ToList

python - 使用子节点解析 xml 并创建 Pandas 数据框