生成用于各种xml子标记的xsd和Java类-JAXB

时间:2019-06-10 02:41:10

标签: java xml xsd jaxb xjc

我想知道我们是否可以为不同的子xml标记生成xsd和相应的java类。我对xml解析很陌生。

案例:1

<?xml version="1.0"?>
<SSNExportDocument xmlns="urn:com:ssn:schema:export:SSNExportFormat.xsd" Version="0.1" DocumentID="8b6fdfce-9f5f-4110-b6da-c5650f0851c2-1" ExportID="8b6fdfce-9f5f-4110-b6da-c5650f0851c2" JobID="464" RunID="3726980" CreationTime="2019-06-01T20:20:00.417-04:00" StartTime="2019-06-01T14:20:00.000-04:00" EndTime="2019-06-01T20:20:00.000-04:00">
    <MeterData MeterName="CBRE-11459398" UtilDeviceID="11459398" MacID="anonymized">
        <RegisterData StartTime="2019-06-01T14:00:00.000-04:00" EndTime="2019-06-01T14:00:00.000-04:00" NumberReads="1">
            <RegisterRead ReadTime="2019-06-01T14:00:00.000-04:00" GatewayCollectedTime="2019-06-01T19:40:03.116-04:00" RegisterReadSource="REG_SRC_TYPE_EO_CURR_READ" Season="-1">
                <Tier Number="0">
                    <Register Number="1" Summation="9981.2000" SummationUOM="GAL"/>
                </Tier>
            </RegisterRead>
        </RegisterData>
    </MeterData>
    <MeterData MeterName="CBRE-11460365" UtilDeviceID="11460365" MacID="anonymized">
        <RegisterData StartTime="2019-06-01T14:00:00.000-04:00" EndTime="2019-06-01T14:00:00.000-04:00" NumberReads="1">
            <RegisterRead ReadTime="2019-06-01T14:00:00.000-04:00" GatewayCollectedTime="2019-06-01T19:40:03.113-04:00" RegisterReadSource="REG_SRC_TYPE_EO_CURR_READ" Season="-1">
                <Tier Number="0">
                    <Register Number="1" Summation="142104.1000" SummationUOM="GAL"/>
                </Tier>
            </RegisterRead>
        </RegisterData>
    </MeterData>
</SSNExportDocument>

案例:2

<?xml version="1.0"?>
<SSNExportDocument xmlns="urn:com:ssn:schema:export:SSNExportFormat.xsd" Version="0.1" DocumentID="7b9d9a38-7739-4c67-9fb3-08ff1826d966-2" ExportID="7b9d9a38-7739-4c67-9fb3-08ff1826d966" JobID="465" RunID="2983700" CreationTime="
:2018-12-19T20:20:01.218-05:00" StartTime="2018-12-19T14:20:00.000-05:00" EndTime="2018-12-19T20:20:00.000-05:00">
        <MeterData MeterName="CBRE-11460650" UtilDeviceID="11460650" MacID="00:11:01:ff:fe:00:db:ff">
                <IntervalReadData IntervalLength="60" StartTime="2018-12-19T07:00:00.000-05:00" EndTime="2018-12-19T19:00:00.000-05:00" NumberIntervals="12">
                        <Interval EndTime="2018-12-19T08:00:00.000-05:00" GatewayCollectedTime="2018-12-19T19:40:03.052-05:00" BlockSequenceNumber="0" IntervalSequenceNumber="6636688262981226347">
                                <Reading Channel="1" RawValue="0.0" Value="0" UOM="GAL" BlockEndValue="78582.3000"/>
                        </Interval>
                        <Interval EndTime="2018-12-19T09:00:00.000-05:00" GatewayCollectedTime="2018-12-19T19:40:03.052-05:00" BlockSequenceNumber="0" IntervalSequenceNumber="6636703724863491951">
                                <Reading Channel="1" RawValue="0.0" Value="0" UOM="GAL" BlockEndValue="78582.3000"/>
                        </Interval>
              </IntervalReadData
        </MeterData>
</SSNExportDocument>

在上述情况下,您可以看到MeterData标签的内容不同,但MeterData标签保持不变。

1 个答案:

答案 0 :(得分:1)

XML文档通常被描述为“半结构化”,但实际上,它们的范围从高度结构化到高度非结构化。像Java这样的常规编程语言最擅长于处理高度结构化的数据,因此,像JAXB这样的数据绑定技术在这种情况下效果最好。您越是转向高度非结构化(例如HTML),JAXB就越困难;到那时,您应该使用通用树模型(例如DOM,XOM或JDOM),或者使用专业XML处理语言(例如XSLT和XQuery)。您显示的示例位于频谱的中间位置,在这里您开始移出JAXB舒适区域,但是仍然仍然可行。

这里还有另一个维度是结构随时间的稳定性。模式更改的次数越多,您越远离JAXB的舒适区。

相关问题