在我的XSD中,我有:
<xs:complexType name="scheduleLocation">
<xs:sequence>
<xs:element name="arrivalTime" type="hhmmss" default="00:00:00" minOccurs="0"/>
<xs:element name="departureTime" type="hhmmss" default="00:00:00" minOccurs="0"/>
<xs:element name="passingTime" type="xs:boolean" default="false" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
表示以下XML提取有效:
<scheduleLocation>
<arrivalTime>07:33:00</arrivalTime>
<departureTime>07:34:00</departureTime>
</scheduleLocation>
(即没有经过时间的节点)
使用D6 XML数据绑定向导我得到:
function TXMLScheduleLocation.Get_PassingTime: Boolean;
begin
Result := ChildNodes['passingTime'].NodeValue;
end;
当然,如果我尝试获取传递时间值,那么它会在XML中未指定passingTime的地方崩溃。有没有办法解决这个问题 - 向导的一些技巧?此外,我认为默认值被忽略。我是否必须手动编辑结果?
顺便提一下,xsd.exe会生成xxxSpecified字段,这些字段在这里会有所帮助。
答案 0 :(得分:2)
AFAIK,XML Databinding向导不考虑默认值,您必须手动编码:
function TXMLScheduleLocation.Get_PassingTime: Boolean;
begin
if ChildNodes['passingTime'].NodeValue = null then
Result := false
else
Result := ChildNodes['passingTime'].NodeValue;
end;