简体   繁体   English

C# 中的 ArrayOfXElement 到 DataSet

[英]ArrayOfXElement to DataSet in C#

No, there is no appropriate answer in stack overflow yet.不,堆栈溢出还没有合适的答案。 I am getting ArrayOfXElement in .net Core through Connected Services.我通过 Connected Services 在 .net Core 中获取 ArrayOfXElement。 But, I need to convert it into DataSet.但是,我需要将其转换为 DataSet。 How can I do that?我怎样才能做到这一点? I wrote the following code using all the examples I had, but I think I am playing with wrong nodes/elements.我使用我拥有的所有示例编写了以下代码,但我认为我正在使用错误的节点/元素。 I do see schema as well as data in the nodes.我确实在节点中看到了模式和数据。

public static DataSet ToDataSet(this ArrayOfXElement xElementsForSchool)
{
    DataSet dataSet = new DataSet();
    foreach (XElement xElement in xElementsForSchool.Nodes)
    {
        string xml = xElement.ToString();
        DataTable table = new DataTable();
        table.ReadXml(new System.IO.StringReader(xml));
        dataSet.Tables.Add(table);
    }

    return dataSet;
}

ArrayOfXElement consists of two Node elements. ArrayOfXElement 由两个 Node 元素组成。 Contest on the first Node is as below第一个节点的比赛如下

<xs:schema id="Results" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="Results" msdata:IsDataSet="true" msdata:Locale="">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="School">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
              <xs:element name="Name" type="xs:string" minOccurs="0" />
       </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

Content of 2nd Node is as below.第二节点的内容如下。

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
      <Results xmlns="">
        <School diffgr:id="School1" msdata:rowOrder="0">
          <ID>83d08e0a-411d-4546-9d7f-0002ee22a3f3</ID>
          <Name>Canoga Park</Name>
        </School>
      </Results>
    </diffgr:diffgram>

Use this function使用此 function

public DataSet ToDataSet(ArrayOfXElement arrayOfXElement)
{
    var strSchema = arrayOfXElement.Nodes[0].ToString();
    var strData = arrayOfXElement.Nodes[1].ToString();
    var strXml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\t<DataSet>";
    strXml += strSchema + strData;
    strXml += "</DataSet>";

    DataSet ds = new DataSet("TestDataSet");
    ds.ReadXml(new MemoryStream(Encoding.UTF8.GetBytes(strXml)));

    return ds;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM