我想知道我们是否可以为不同的子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标签保持不变。
答案 0 :(得分:1)
XML文档通常被描述为“半结构化”,但实际上,它们的范围从高度结构化到高度非结构化。像Java这样的常规编程语言最擅长于处理高度结构化的数据,因此,像JAXB这样的数据绑定技术在这种情况下效果最好。您越是转向高度非结构化(例如HTML),JAXB就越困难;到那时,您应该使用通用树模型(例如DOM,XOM或JDOM),或者使用专业XML处理语言(例如XSLT和XQuery)。您显示的示例位于频谱的中间位置,在这里您开始移出JAXB舒适区域,但是仍然仍然可行。
这里还有另一个维度是结构随时间的稳定性。模式更改的次数越多,您越远离JAXB的舒适区。