Delphi XML绑定向导和可选元素

时间:2012-03-26 19:19:00

标签: xml delphi data-binding

在我的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字段,这些字段在这里会有所帮助。

1 个答案:

答案 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;