2010-10-26 15 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