gpt4 book ai didi

delphi - 使用 XML 数据绑定(bind)时生成复杂类型的问题

转载 作者:行者123 更新时间:2023-12-03 15:57:30 24 4
gpt4 key购买 nike

我正在使用 XML 数据映射,但在使用它时生成复杂类型时遇到问题。

如果我有一个如下所示的 XML,它工作正常

<?xml version="1.0" standalone="yes" ?>
<Sample>
<connection>
<item Name="ABC">123</item>
<item Name="XYZ">123</item>
<item Name="MNO">123</item>
</connection>
<connection>
<item Name="ABC">123</item>
<item Name="XYZ">123</item>
<item Name="MNO">123</item>
</connection>
</Sample>

我正在获取复杂类型,如 SampleType、ConnectionType 和 ItemType

但是如果我有像

这样的 XML
<?xml version="1.0" standalone="yes" ?>
<Sample>
<connection>
<item Name="ABC"/>
<item Name="XYZ"/>
<item Name="MNO"/>
</connection>
<connection>
<item Name="ABC"/>
<item Name="XYZ"/>
<item Name="MNO"/>
</connection>
</Sample>

我得到的复杂类型为 SampleType、ConnectionType、ItemType、ItemType2、ItemType22、ItemType222、ItemType2222 和 ItemType22222,即 ItemType 等于 XML 中存在的项目数。

为什么会发生这种情况以及如何解决这个问题?

最佳答案

这是因为数据映射器并不是从 XML 文件(或更措辞更好的 XML 文档)推断数据,而是从 XML Schema 推断数据。 .

XML 架构描述了 XML 文档应遵循的语法。

XML 模式可以存储为 XSD 文件或 DTD 文件。

因此,您应该采取的第一步是创建 XSD 架构。您可以从从 XML 生成 XSD 开始,然后完善该 XSD。

在线XML-2-XSD工具可以帮助您生成 XSD,但还有更多工具。

然后在数据映射器中使用该 XSD,您将获得更好的机会。

注意:XML 类型的定义与大多数编程语言不同,因此您不能总是将 XML 数据类型映射到 Delphi。您的简单情况会起作用,但是一旦您在 XML 中执行递归或 null,它就会变得非常棘手。

编辑:为两个 XML 文档添加了 XSD 示例。

我用了XmlForAsp to infer the XSD这样你就有了一个良好的开端。

第一个和第二个 XML 文档的推断 XSD 是相同的:

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Sample" type="SampleType" />
<xsd:complexType name="SampleType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="connection" type="connectionType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="connectionType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="item" type="itemType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="itemType">
<xsd:attribute name="Name" type="xsd:string" />
</xsd:complexType>
</xsd:schema>

--杰罗恩

关于delphi - 使用 XML 数据绑定(bind)时生成复杂类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4024763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com