在我的 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 数据绑定(bind)向导我得到:
function TXMLScheduleLocation.Get_PassingTime: Boolean;
begin
Result := ChildNodes['passingTime'].NodeValue;
end;
当然,如果我尝试获取传递时间值,那么它会在 XML 中未指定传递时间的地方崩溃。有什么办法解决这个问题 - 向导的一些技巧吗?另外,我认为默认值被忽略了。我是否需要手动编辑结果?
顺便说一句,xsd.exe 会生成 xxxSpecified 字段,这对这里有帮助。
最佳答案
据我所知,XML 数据绑定(bind)向导不考虑默认值,您必须手动对它们进行编码:
function TXMLScheduleLocation.Get_PassingTime: Boolean;
begin
if ChildNodes['passingTime'].NodeValue = null then
Result := false
else
Result := ChildNodes['passingTime'].NodeValue;
end;
关于xml - Delphi XML 绑定(bind)向导和可选元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878313/