将具有混合复杂类型元素的XML转换为DataSet以及其他DataSet限制

时间:2009-11-11 05:29:31

标签: .net xml xsd dataset

这是一个两部分问题。第一个是关于DataSet和XML的特定问题。第二个是更一般的“我采取正确的方法”类型问题。虽然我当然感谢回答这两个问题的回复,但我也欢迎只能解决其中一个问题的答案!

问题1

DataSet类是否支持mixed complex type elements?例如,假设我有以下XML:

<cars>
   <car id="1">10000
     <colour>blue</colour>
     <doors>4</doors>
   </car>
</cars>

描述此XML的XSD将具有复杂类型,其中“mixed”属性设置为true。这允许我以纯文本的形式获得我的汽车价值(10,000美元),以及我需要的任何其他元素。

但是,当我将此XML转换为DataSet并使用以下代码再次返回时:

StringReader sr = new StringReader(xml);
DataSet dataset = new DataSet();
dataset.ReadXml(sr);
sr.Close();

StringWriter sw = new StringWriter();
dataset.WriteXml(sw);
xml = sw.ToString();
sw.Close();

然后生成的XML如下:

<cars>
   <car id="1">
     <colour>blue</colour>
    <doors>4</doors>
  </car>
</cars>

即。值“10000”缺失。

不仅如果我有ReadXml()调用推断XML模式(如上所述),而且如果我提供XSD(例如通过调用ReadXmlSchema())。

有什么方法可以避免这种情况吗?或者我应该确保避免混合类型?

问题2

在将XML转换为DataSet时我应该注意哪些其他限制,例如上面概述的那些限制,反之亦然?

或许问题1表明我正在以相反的顺序处理事情。目前我开始使用所需的XML(例如上面的汽车示例),并将其转换为DataSet。目的是将数据作为XML持久保存到数据库中,当我希望在WinForm上显示此数据时,我将XML转换为DataSet并对DataSet中的各个表使用数据绑定。但是,不是从XSD开始,也许我应该首先将我的数据定义为(类型化)DataSet,然后让ReadXml / WriteXml方法处理XML的样子?

1 个答案:

答案 0 :(得分:0)

感谢您的所有回复。 ;)

看到没有人能够提供帮助,我想我会尝试回答我自己的问题:

问题1 - DataSet类根本不允许使用混合类型元素。除了我自己的测试之外,我能找到的唯一确认是this MSDN forum post,其中ADO.NET程序管理器写道:“这种行为是设计的 - DataSet不支持混合内容XML / XSD。” / p>

问题2 - 这表明了从XML / XSD入手并尝试将其转换为DataSet的危险。这导致我们重新思考我们的方法,目的是首先从DataSet开始,然后让XML格式从中派生出来,而不是相反。

(还欢迎任何人的想法!)