2010-10-26 74 views
3

我正在使用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 and 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, and ItemType22222即XML,ItemTypes是平等存在于XML项目的数量。

为什么会发生这种情况,我该如何解决这个问题?

回答

2

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

XML Schema描述了XML文档应遵守的语法。

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

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

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

然后在数据映射器中使用该XSD,并且您创造了更好的机会。

注意:XML类型的定义与大多数编程语言不同,所以您不能总是将您的XML数据类型映射到Delphi。你的简单情况会起作用,但是一旦你做了递归或XML为空,它就会变得非常多毛。

编辑:为两个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> 

--jeroen

+0

感谢的Jeroen。 “你的简单情况将起作用......”你能否建议我解决它的任何替代方案。 – Bharat 2010-10-26 15:23:18

+0

您的简单案例很容易转换为XSD;在我的回答中,我已经为这两个XML文档包含了一个可用的XSD。 – 2010-10-26 20:03:47