Je veux lire des données XML dans un DataTable - en utilisant la méthode ReadXml
comme siComment lire XML dans un DataTable lorsque le XML est dans un espace de nom particulier
var dataTable = new DataTable();
XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString));
dataTable.ReadXml(xmlReader);
Voir ci-dessous pour la chaîne XML. Le XML inclut la définition du schéma et tout va bien quand les données n'ont pas d'espace de noms (c'est-à-dire dans l'espace de noms global) mais je ne peux pas spécifier comment le schéma et le XML sont tels.
L'exception que je reçois est "DataTable 'cd: Motos' ne correspond à aucun DataTable dans la source."
Je sais que je fais une erreur d'écolier vraiment stupide, mais je me suis arraché les cheveux maintenant pour une heure ou deux - du bidouillage sans succès. Est-ce que quelqu'un peut me mettre hors de ma misère?
XML qui fonctionne
<NewDataSet xmlns="">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Motorcycles" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Motorcycles">
<xs:complexType>
<xs:sequence>
<xs:element name="Manufacturer" type="xs:string" minOccurs="0" />
<xs:element name="PercentageOfRiders" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Motorcycles>
<Manufacturer>Honda</Manufacturer>
<PercentageOfRiders>23</PercentageOfRiders>
</Motorcycles>
<Motorcycles>
<Manufacturer>Yamaha</Manufacturer>
<PercentageOfRiders>15</PercentageOfRiders>
</Motorcycles>
<Motorcycles>
<Manufacturer>Suzuki</Manufacturer>
<PercentageOfRiders>16</PercentageOfRiders>
</Motorcycles>
<Motorcycles>
<Manufacturer>BMW</Manufacturer>
<PercentageOfRiders>6</PercentageOfRiders>
</Motorcycles>
<Motorcycles>
<Manufacturer>Other</Manufacturer>
<PercentageOfRiders>40</PercentageOfRiders>
</Motorcycles>
</NewDataSet>
XML avec espace de noms (ne fonctionne pas)
<cd:NewDataSet xmlns="urn:ChartData" xmlns:cd="urn:ChartData">
<xs:schema id="NewDataSet"
targetNamespace="urn:ChartData"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
elementFormDefault="qualified">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="cd:Motorcycles" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Motorcycles">
<xs:complexType>
<xs:sequence>
<xs:element name="Manufacturer" type="xs:string" minOccurs="0" />
<xs:element name="PercentageOfRiders" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<cd:Motorcycles>
<cd:Manufacturer>Honda</cd:Manufacturer>
<cd:PercentageOfRiders>23</cd:PercentageOfRiders>
</cd:Motorcycles>
<cd:Motorcycles>
<cd:Manufacturer>Yamaha</cd:Manufacturer>
<cd:PercentageOfRiders>15</cd:PercentageOfRiders>
</cd:Motorcycles>
<cd:Motorcycles>
<cd:Manufacturer>Suzuki</cd:Manufacturer>
<cd:PercentageOfRiders>16</cd:PercentageOfRiders>
</cd:Motorcycles>
<cd:Motorcycles>
<cd:Manufacturer>BMW</cd:Manufacturer>
<cd:PercentageOfRiders>6</cd:PercentageOfRiders>
</cd:Motorcycles>
<cd:Motorcycles>
<cd:Manufacturer>Other</cd:Manufacturer>
<cd:PercentageOfRiders>40</cd:PercentageOfRiders>
</cd:Motorcycles>
</cd:NewDataSet>
Merci Marc. En l'occurrence, je ne peux pas changer le code qui instancie le DataTable (histoire longue) - mais au moins je peux maintenant arrêter avec mon approche d'essai-et-erreur pour le faire fonctionner en manipulant le schéma XML +. –