C#DataSet.ReadXml()省略了一些列

时间:2015-08-24 19:51:33

标签: c# xml datatable dataset readxml

这是我的XML:

  <notebooks>
    <notebook>
      <is-default type="boolean">true</is-default>
      <name>James's notebook</name>
      <id>MS4zfDEvMS9Ob3RlYm9va3wzLjM=</id>
    </notebook>
    <notebook>
      <is-default type="boolean">false</is-default>
      <name>James alternate notebook</name>
      <id>NDQuMnwzNC8zNC9Ob3RlYm9va3wxMTIuMg==</id>
    </notebook>
    <notebook>
      <is-default type="boolean">false</is-default>
      <name>Notebook for James lab</name>
      <id>NTMuM3w0MS80MS9Ob3RlYm9va3wxMzUuMw==</id>
    </notebook>
  </notebooks>

我正在做我在这里找到的标准DataSet加载:

    DataSet ds = new DataSet();
    ds.ReadXml(new StringReader(lcXMLSegment));

事情很好,除了“笔记本”表只有“name”和“id”列。除非我从每个元素中删除type =“boolean”,否则“is-default”列不会出现。

我尝试在执行ReadXml()之前创建一个DataTable模式,但这没有做任何事情,因为我假设DataSet.ReadXml()在数据集中重新创建表。我还尝试了ReadXml()上的各种第二个参数来读取或推断架构,它没有区别(或抛出错误)。

这个XML是我希望访问并执行自定义编程的Web API返回的,因此我无法控制XML的本机结构。我很好,如果“is-default”字段没有作为类型布尔值拉入,因为我可以处理所有字符串类型的数据。我也可以为从XML加载的任何数据创建完整的模式,但我不知道在这种情况下我会在哪里或如何做。

1 个答案:

答案 0 :(得分:0)

解决此问题的另一种方法是提前准备数据表;

DataSet ds = new DataSet();
DataTable dt = new DataTable("notebook");
dt.Columns.Add("is-default", typeof(bool));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("id", typeof(string));
ds.Tables.Add(dt);

ds.ReadXml(new StringReader(lcXMLSegment));