J'ai le schéma ci-dessous:Est-ce que DataSet prend en charge le type complexe lors de la méthode GetXml?
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="WSParam">
<xs:complexType>
<xs:sequence>
<xs:element name="domain" type="xs:string"/>
<xs:element name="userName" type="xs:string"/>
<xs:element name="Cases">
<xs:complexType>
<xs:sequence>
<xs:element name="caseName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
J'attendais la sortie DataSet.GetXml() ci-dessous:
<NewDataSet>
<WSParam>
<domain>ad</domain>
<userName>admin</userName>
<Cases>
<caseName>case 1</caseName>
</Cases>
</WSParam>
</NewDataSet>
Mais la sortie est:
<NewDataSet>
<WSParam>
<domain>ad</domain>
<userName>admin</userName>
</WSParam>
<Cases>
<caseName>case 1</caseName>
</Cases>
</NewDataSet>
quelqu'un me confirmer la comportement correct de DataSet.GetXml() avec un type complexe ou quelque chose me manque.
Toute indication est fortement appréciée.
UPDATES1:
J'utilise DataSet.ReadXmlSchema ("... xsd"). De cela, j'utilise DataSet.Tables [..] pour créer DataTable pour mettre les données. Appelez ensuite DataSet.GetXml() pour obtenir la représentation XML de la chaîne.
UPDATES2:
code:
private void button2_Click(object sender, EventArgs e)
{
String sXSD = @"C:\WindowsFormsApplication1\WindowsFormsApplication1\XMLFile1.xsd";
DataSet dsXSD = new DataSet();
dsXSD.ReadXmlSchema(sXSD);
int k = 0;
do
{
DataRow d;
d = dsXSD.Tables["tblUser"].NewRow();
int i = 0;
do
{
d[i] = k;
i = (i + 1);
} while (i < dsXSD.Tables["tblUser"].Columns.Count);
dsXSD.Tables["tblUser"].Rows.Add(d);
d = dsXSD.Tables["tblUserRole"].NewRow();
i = 0;
do
{
d[i] = k;
i = (i + 1);
} while (i < dsXSD.Tables["tblUserRole"].Columns.Count);
dsXSD.Tables["tblUserRole"].Rows.Add(d);
k = (k + 1);
} while (k < 3);
dsXSD.WriteXml("c:\\test.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" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="tblUser">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="UserID" type="xsd:int" />
<xsd:element name="FullName" type="xsd:string" nillable="true" />
<xsd:element name="tblUserRole">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="UserID" type="xsd:int" />
<xsd:element name="RoleID" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
SORTIE:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<tblUser>
<UserID>0</UserID>
<FullName>0</FullName>
<tblUserRole>
<UserID>0</UserID>
<RoleID>0</RoleID>
</tblUserRole>
</tblUser>
<tblUser>
<UserID>1</UserID>
<FullName>1</FullName>
<tblUserRole>
<UserID>1</UserID>
<RoleID>1</RoleID>
</tblUserRole>
</tblUser>
<tblUser>
<UserID>2</UserID>
<FullName>2</FullName>
<tblUserRole>
<UserID>2</UserID>
<RoleID>2</RoleID>
</tblUserRole>
</tblUser>
</NewDataSet>
Je voudrais vérifier votre DataSet pour les objets DataRelation qui relient WSParam et les affaires. –
J'ai vu ChildRelations compter à 1 nommé WSParam_Cases – bachie
J'ai vu aussi DataSet.Relations. Cela semble correct. – bachie