代码之家  ›  专栏  ›  技术社区  ›  CodeMonkey1313

导致错误的数据表readxmlschema和readxml

  •  0
  • CodeMonkey1313  · 技术社区  · 14 年前

    我对数据表的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>
    
    3 回复  |  直到 13 年前
        1
  •  1
  •   Sky Sanders    14 年前

    架构和数据不表示单个表,并且格式不为.NET数据对象(如DataSet和DataTable)所识别。

    最好的方法是在设计器中设计一个数据集,然后调用dataset.writexmlschema/data来获取examplar.xsd。

        2
  •  1
  •   Aldo    13 年前

    尝试改用数据集,并从数据集中提取数据表
    例子:

    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
  •  0
  •   ManojAnavatti    14 年前

    如果您想让数据库中的xml文件可以使用,dataset.writexml(“filepath”,xmlwritemode.writeschema)

    然后,将文件读入表中, dataset.readxml(“文件路径”,xmlreadmode.readschema) 表=数据集。表(0)

    假设您已将表的架构填充到xmlfileschema的架构。