如何从在 java 中引用 xsd 的主 XSD 生成 java 类对象



我有一个引用xsd的xml文件。主引用 xsd 也有许多引用 xsd。

我的问题是如何将 xsd 转换为具有许多引用 xsd 的 Java 类。

我是否必须在同一位置提供所有引用的 xsd?

这是我的 xsd 结构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:env="http://data.schemas.tfn.fsr.com/Envelope/2008-05-01/" xmlns="http://fsr.com/Fundamental/2011-07-07/" xmlns:sou="http://fsr.com/FinancialSource/2011-07-07/" xmlns:pe="http://fsr.com/FinancialPeriod/2011-07-07/" xmlns:fs="http://fsr.com/FinancialStatement/2011-07-07/" xmlns:ir="http://fsr.com/FinancialInstrumentRelationship/2011-07-07/" xmlns:fl="http://fsr.com/FinancialLineItem/2011-07-07/" xmlns:seg="http://fsr.com/FinancialSegment/2011-07-07/" xmlns:sli="http://fsr.com/StandardizedLineItem/2011-07-07/" xmlns:ss="http://fsr.com/StandardizedStatement/2011-07-07/" xmlns:ful="http://fsr.com/FundamentalLineItem/2011-07-07/" xmlns:esg="http://fsr.com/ESGSupportingInfo/2011-07-07/" xmlns:cor="http://fsr.com/CoraxData/2012-10-25/" xmlns:al="http://fsr.com/FundamentalAnalytics/2011-07-07/" xmlns:md="http://data.schemas.financial.fsr.com/metadata/2010-10-10/" targetNamespace="http://fsr.com/Fundamental/2011-07-07/" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0">
    <xs:import namespace="http://data.schemas.tfn.fsr.com/Envelope/2008-05-01/" schemaLocation="../../Envelope/2008-05-01/ContentEnvelope.xsd"/>
    <xs:include schemaLocation="FundamentalDataItem.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialSource/2011-07-07/" schemaLocation="FinancialSource.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialPeriod/2011-07-07/" schemaLocation="FinancialPeriod.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialStatement/2011-07-07/" schemaLocation="FinancialStatement.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialInstrumentRelationship/2011-07-07/" schemaLocation="FundamentalInstrument.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialLineItem/2011-07-07/" schemaLocation="FinancialLineItem.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialSegment/2011-07-07/" schemaLocation="FinancialSegment.xsd"/>
    <!--<xs:import namespace="http://fsr.com/StandardizedLineItem/2011-07-07/" schemaLocation="StandardizedLineItem.xsd"/>-->
    <xs:import namespace="http://fsr.com/StandardizedStatement/2011-07-07/" schemaLocation="StandardizedStatement.xsd"/>
    <!--xs:import namespace="http://fsr.com/FundamentalLineItem/2011-07-07/" schemaLocation="FundamentalLineItem.xsd"/-->
    <xs:import namespace="http://fsr.com/CoraxData/2012-10-25/" schemaLocation="TRFCorax.xsd"/>
    <xs:import namespace="http://fsr.com/FundamentalAnalytics/2011-07-07/" schemaLocation="FundamentalSeries.xsd"/>
    <xs:import namespace="http://fsr.com/FundamentalAnalytics/2011-07-07/" schemaLocation="FundamentalSeriesPeriod.xsd"/>
  <xs:import namespace="http://fsr.com/FundamentalAnalytics/2011-07-07/" schemaLocation="FundamentalSeriesFiscalCalendar.xsd"/>
    <xs:import namespace="http://fsr.com/FundamentalAnalytics/2011-07-07/" schemaLocation="FundamentalAnalytic.xsd"/>
    <xs:import namespace="http://data.schemas.financial.fsr.com/metadata/2010-10-10/" schemaLocation="../../Metadata/2010-10-10/RelationshipDataItem.xsd"/>
    <xs:import namespace="http://data.schemas.financial.fsr.com/metadata/2010-10-10/" schemaLocation="../../Metadata/2010-10-10/IdentifierDataItem.xsd"/>
    <xs:import namespace="http://data.schemas.financial.fsr.com/metadata/2010-10-10/" schemaLocation="../../Metadata/2010-10-10/AdminStatusDataItem.xsd"/>
    <xs:import namespace="http://fsr.com/ESGSupportingInfo/2011-07-07/" schemaLocation="ESGSupportingInfo.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialStatement/2011-07-07/" schemaLocation="FinancialStatementLineItem.xsd"/>
    <xs:import namespace="http://fsr.com/FinancialStatement/2011-07-07/" schemaLocation="FinancialStatementNonNumericLineItem.xsd"/>
    <xs:import namespace="http://fsr.com/StandardizedStatement/2011-07-07/" schemaLocation="StandardizedStatementLineItem.xsd"/>
    <xs:complexType name="FundamentalDataItem" mixed="false">
        <xs:complexContent>
            <xs:extension base="env:DataItemBase">
                <xs:sequence>
                    <xs:element ref="Fundamental" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="FinancialPeriodDataItem" mixed="false">
        <xs:complexContent>
            <xs:extension base="env:DataItemBase">
                <xs:sequence>
                    <xs:element ref="pe:FinancialPeriod" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

这是我的 XSD 树结构

主 Xsd

<xs:import schemaLocation="../../Envelope/2008-05-01/Mentale.xsd" namespace="http://data.schemas.tfn.son.com/Envelope/2008-05-01/"/>
<xs:include schemaLocation="MentaleDataItem.xsd"/>
<xs:complexType mixed="false" name="MentaleDataItem">
    <xs:complexContent>
        <xs:extension base="env:DataItemBase">
            <xs:sequence>
            <xs:element minOccurs="0" ref="Mentale"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
</xs:schema>

为此,您可以使用 JAXB。 请参阅甲骨文文档

JAXB 可用于操作 XML。

JAXB 将采用您编写的 XML 模式,并创建一组与该模式对应的类。JAXB 实用程序将创建用于操作该 XML 的数据结构层次结构。

然后可以使用 JAXB 读取 XML 文件,然后创建生成的类的实例 - 加载来自 XML 的数据。JAXB 也做了相反的事情:采用 Java 类,并生成相应的 XML。

我喜欢JAXB,因为它易于使用,并且带有>Java 1.6(如果您使用的是1.5或更低版本,则可以下载JAXB .jars)。它创建类层次结构的方式很直观,根据我的经验,在抽象"XML"方面做得不错,这样我就可以专注于"数据"。

还有其他软件可以促进这一点,例如:https://www.liquid-technologies.com/

最新更新