当XML在特定命名空间中时,如何将XML读入DataTable
发布时间:2020-12-16 23:21:19 所属栏目:百科 来源:网络整理
导读:我想将一些 XML数据读入DataTable – 使用ReadXml方法 var dataTable = new DataTable(); XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString)); dataTable.ReadXml(xmlReader); 请参阅下面的XML字符串. XML包含模式定义,当数据没有命名空
我想将一些
XML数据读入DataTable – 使用ReadXml方法
var dataTable = new DataTable(); XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString)); dataTable.ReadXml(xmlReader); 请参阅下面的XML字符串. XML包含模式定义,当数据没有命名空间(即在全局命名空间中)时,一切都很好,但我无法弄清楚如何指定模式和XML,以便XML数据元素在另一个命名空间中. 我得到的例外是“DataTable”cd:Motorcycles与源中的任何DataTable都不匹配. 我知道我正在犯一些非常愚蠢的小学生错误,但我现在已经把头发拉了一个小时左右 – 摆弄没有成功. 有人能让我把我从痛苦中解救出来吗? 有效的XML <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(不起作用) <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> 解决方法
阅读此XML时,您需要考虑两件事:
> XML命名空间urn:ChartData <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="cd:Motorcycles" <== this name here is important msdata:UseCurrentLocale="true"> 考虑到这两点,您需要更改实例化DataTable的方式,然后读取工作正常: // define the data table's name to be the value of the msdata:MainDataTable // attribute on the NewDataSet element,and define the XML namespace to use DataTable dataTable = new DataTable("Motorcycles","urn:ChartData"); XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString)); dataTable.ReadXml(xmlReader); 现在,您的dataTable应该在其.Rows属性中包含一些条目 – 在我的情况下为五个(使用您的第二个示例XML). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |