Создание классов xsd и Java для изменяющегося дочернего тега xml - JAXB - PullRequest
0 голосов
/ 10 июня 2019

Мне интересно, могли бы мы сгенерировать xsd и соответствующие классы java для различных дочерних тегов xml.Я довольно новичок в разборе 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 Ответ

1 голос
/ 10 июня 2019

XML-документы часто описываются как «полуструктурированные», но на самом деле они находятся в диапазоне от высокоструктурированных до высокоструктурированных. Обычные языки программирования, такие как Java, лучше всего работают с высокоструктурированными данными, и в результате технологии связывания данных, такие как JAXB, работают лучше всего на этом конце спектра. Чем больше вы переходите к крайне неструктурированным (например, HTML), тем труднее становится JAXB; на этом конце спектра вы должны либо использовать общие модели дерева, такие как DOM, XOM или JDOM, либо специализированные языки обработки XML, такие как XSLT и XQuery. Пример, который вы показываете, находится в середине спектра, где вы начинаете выходить из зоны комфорта JAXB, но там, где он все еще практически жизнеспособен.

Здесь есть еще одно измерение - стабильность структуры во времени. Чем чаще меняется схема, тем больше вы выходите из зоны комфорта JAXB.

...