【问题标题】:DataTable ReadXmlSchema and ReadXml Resulting in errorDataTable ReadXmlSchema 和 ReadXml 导致错误
【发布时间】:2010-04-07 23:37:53
【问题描述】:

我在使用 DataTable 的 ReadXmlSchema 和 ReadXml 方法时遇到了一些问题。我收到错误“DataTable 不支持来自 Xml 的架构推断”。

代码片段: 我试过了

Table.ReadXmlSchema(new StringReader(File.ReadAllText(XsdFilePath)));
Table.ReadXml(new StringReader(File.ReadAllText(XmlFilePath)));

Table.ReadXmlSchema(XsdFilePath);
Table.ReadXml(XmlFilePath);

Xml 片段:

<ScreenSets>
  <ScreenSet id="Credit 1">
    <Screen xmlFile="sb-credit1.en.xml" tabText="Recommendation" isCached="false">
      <Buttons>
        <Button id="btnClosePresentation"/>
      </Buttons>
    </Screen>
  </ScreenSet>
  <ScreenSet id="Credit 2">
    <Screen xmlFile="sb-credit2.en.xml" tabText="Recommendation" isCached="false">
      <Buttons>
        <Button id="btnClosePresentation"/>
      </Buttons>
    </Screen>
  </ScreenSet>
  <ScreenSet id="Credit 3">
    <Screen xmlFile="sb-credit3.en.xml" tabText="Recommendation" isCached="false">
      <Buttons>
        <Button id="btnClosePresentation"/>
      </Buttons>
    </Screen>
  </ScreenSet>
</ScreenSets>

Xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ScreenSets">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="ScreenSet">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Screen">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Buttons">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="Button">
                            <xs:complexType>
                              <xs:attribute name="id" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="xmlFile" type="xs:string" use="required" />
                  <xs:attribute name="tabText" type="xs:string" use="required" />
                  <xs:attribute name="isCached" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="id" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

【问题讨论】:

    标签: xml xsd datatable


    【解决方案1】:

    您的架构和数据不代表单个表,并且不是 .net 数据对象(如 DataSet 和 DataTable)可识别的格式。

    最好的办法是在设计器中设计一个数据集,然后调用 dataset.WriteXmlSchema/Data 来获取您的示例 .xsd。

    【讨论】:

    • 那么数据表不支持嵌套元素吗?而是将其加载到数据集中更有意义吗?
    • 看起来你/我是对的,DataSet 是要走的路。您只需要找到一种以图形方式表示各个部分的方法。哦,好的,谢谢你的帮助。
    • @MasterMax1313 - 不,表是简单类型的平面记录。数据集可让您将表格组合成您想要的形状。而且,正如您所发现的,将任意 xsd 推入数据表/集并不是最好的计划。 ;-) 很高兴你明白了。
    【解决方案2】:

    尝试改用 DataSet,并从数据集中提取 DataTable
    示例:

    XML = @"
    <Records>
      <Record>
        <Col1>0</Col1>
        <Col2>ABC</Col2>
      </Record>
      <Record>
        <Col1>1</Col1>
        <Col2>CDE</Col2>
      </Record>
    </Records>";
    
    DataSet DS = new DataSet();
    DS.ReadXml(new StringReader(XML));
    
    DataTable DT=DS.Tables["Records"];
    

    【讨论】:

      【解决方案3】:

      如果你想要数据库中的 xml 文件,你可以使用,dataset.WriteXml("filepath", XmlWriteMode.WriteSchema)

      然后,将文件读入表中, dataset.ReadXml("文件路径", XmlReadMode.ReadSchema) table=dataset.tables(0)

      如果您已将表的架构填充到 xmlfileschema 的架构。

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-28
        相关资源
        最近更新 更多