java - 如何在JAVA中解析复杂的嵌套xml文件

标签 java xml jaxb sax

我是 xml 解析新手,无法决定如何在 java 中解析这个复杂的 xml 文件。 我能够解析简单的 xml 文件,但是当涉及到复杂的 xml 文件时,我很困惑。无法使用 java 读取 xml 的元素。 这是我的示例 xml 文件。

<?xml version="1.0"?>
<env:ContentEnvelope xsi:schemaLocation="http://fundamental.schemas.financial.jso.com/Fundamental/2011-07-07/ 
https://theshare.jso.com/sites/TRM-IA/Content%20Marketplace/Strategic%20Data%20Interfaces/SDI%20Schemas/Schemas/Fundamentals/2015-09-25/FundamentalMaster.xsd"
    xmlns:esg="http://fundamental.schemas.financial.jso.com/ESGSupportingInfo/2011-07-07/"
    xmlns:md="http://data.schemas.financial.jso.com/metadata/2010-10-10/"
    xmlns:cr="http://fundamental.schemas.financial.jso.com/CoraxData/2012-10-25/"
    xmlns:ful="http://fundamental.schemas.financial.jso.com/FundamentalLineItem/2011-07-07/"
    xmlns:fun="http://fundamental.schemas.financial.jso.com/Fundamental/2011-07-07/"
    xmlns:ir="http://fundamental.schemas.financial.jso.com/FinancialInstrumentRelationship/2011-07-07/"
    xmlns:fl="http://fundamental.schemas.financial.jso.com/FinancialLineItem/2011-07-07/"
    xmlns:pe="http://fundamental.schemas.financial.jso.com/FinancialPeriod/2011-07-07/"
    xmlns:seg="http://fundamental.schemas.financial.jso.com/FinancialSegment/2011-07-07/"
    xmlns:sr="http://fundamental.schemas.financial.jso.com/FinancialSource/2011-07-07/"
    xmlns:sli="http://fundamental.schemas.financial.jso.com/StandardizedLineItem/2011-07-07/"
    xmlns:ss="http://fundamental.schemas.financial.jso.com/StandardizedStatement/2011-07-07/"
    xmlns:fs="http://fundamental.schemas.financial.jso.com/FinancialStatement/2011-07-07/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:env="http://data.schemas.tfn.jso.com/Envelope/2008-05-01/" minVers="1.0" majVers="3" pubStyle="Message">
    <env:Header>
        <env:Info>
            <env:Id>urn:uuid:069527ab-2c10-48bb-b3d2-206f4e66e5d2</env:Id>
            <env:TimeStamp>2016-12-23T10:09:09+00:00</env:TimeStamp>
        </env:Info>
        <fun:OrgId>20240</fun:OrgId>
        <fun:PartitionId>1</fun:PartitionId>
    </env:Header>
    <env:Body minVers="0.0" majVers="1" contentSet="Fundamental">
        <env:ContentItem action="Insert">
            <env:Data xsi:type="fun:FundamentalDataItem">
                <fun:Fundamental effectiveTo="9999-12-31T00:00:00+00:00" effectiveFrom="2013-06-29T00:55:15.313+00:00" uniqueFuamentalSet="0054341342">
                    <fun:OrganizationId objectType="Organization" objectTypeId="404510">42565596</fun:OrganizationId>
                    <fun:PrimaryReportingEntityCode>A4C67</fun:PrimaryReportingEntityCode>
                    <fun:TotalPrimaryReportingShares>567923000.00000</fun:TotalPrimaryReportingShares>
                    <fun:LocalLanguageId>505074</fun:LocalLanguageId>
                    <fun:IndustryGroups>
                        <fun:IndustryGroup validTo="9999-12-31T00:00:00+00:00" validFrom="1900-01-01T00:00:00+00:00">
                            <fun:GroupCode>BNK</fun:GroupCode>
                            <fun:GroupName languageId="505074">Bank</fun:GroupName>
                            <fun:TaxonomyId>1</fun:TaxonomyId>
                            <fun:IndustryGroupCodeId>3011649</fun:IndustryGroupCodeId>
                        </fun:IndustryGroup>
                    </fun:IndustryGroups>
                    <fun:GaapCode>CAG</fun:GaapCode>
                    <fun:ConsolidationBasis>Consolidated</fun:ConsolidationBasis>
                    <fun:IsFiling>true</fun:IsFiling>
                    <fun:ConsolidationBasisId>3013598</fun:ConsolidationBasisId>
                    <fun:GaapCodeId>3011536</fun:GaapCodeId>
                    <fun:Taxonomies>
                        <fun:Taxonomy>1</fun:Taxonomy>
                    </fun:Taxonomies>
                    <fun:WorldScopeIds>
                        <fun:WorldScopeId validTo="9999-12-31T00:00:00+00:00" validFrom="2012-03-31T00:00:00+00:00">C12436390</fun:WorldScopeId>
                    </fun:WorldScopeIds>
                </fun:Fundamental>
            </env:Data>
        </env:ContentItem>

最佳答案

JAXB 肯定会在这方面为您提供帮助。 由于您正在处理复杂的 xml 文件,我建议采用以下方法(我同意它很长且需要手动操作,但应该可以正常工作)。

1) 根据给定的 xml 内容生成 xsd 架构

2)在eclipse中创建一个JAXB项目,并创建并清空XSD文件,并使用上面生成的xsd模式写入它

3) 将.xsd文件转换为pojo 右键单击​​.xsd文件并生成JAXB类

4) 现在编写代码来解码​​数据并运行它,这应该会为您提供相应的 java 类。

关于java - 如何在JAVA中解析复杂的嵌套xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604792/

相关文章:

java - SAX 解析器在解码时不会忽略 bean 定义中未包含的元素属性

java - 一种让方法暂停 1 秒的方法

java - 正则表达式如何匹配字符串中不重复的子串?

java - 如何使用 JAXB 或 JAX-WS 注释使两个字段相互依赖?

xml - XML <? 的目的是什么? ?> 代币?

java - 将 Xml 转换为 Java Bean - Map 和 Tags 属性的问题

jaxb - 无法将名称 '<sometype>'解析为一个(n) 'type definition'组件

JavaFX 组合框特殊字符

java - 用泛型覆盖

c# - 如何使用 XDocument 打印 <?xml version ="1.0"?>