这是一个两部分问题。第一个是关于DataSet和XML的特定问题。第二个是更一般的“我采取正确的方法”类型问题。虽然我当然感谢回答这两个问题的回复,但我也欢迎只能解决其中一个问题的答案!
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())。
有什么方法可以避免这种情况吗?或者我应该确保避免混合类型?
在将XML转换为DataSet时我应该注意哪些其他限制,例如上面概述的那些限制,反之亦然?
或许问题1表明我正在以相反的顺序处理事情。目前我开始使用所需的XML(例如上面的汽车示例),并将其转换为DataSet。目的是将数据作为XML持久保存到数据库中,当我希望在WinForm上显示此数据时,我将XML转换为DataSet并对DataSet中的各个表使用数据绑定。但是,不是从XSD开始,也许我应该首先将我的数据定义为(类型化)DataSet,然后让ReadXml / WriteXml方法处理XML的样子?
答案 0 :(得分:0)
感谢您的所有回复。 ;)
看到没有人能够提供帮助,我想我会尝试回答我自己的问题:
问题1 - DataSet类根本不允许使用混合类型元素。除了我自己的测试之外,我能找到的唯一确认是this MSDN forum post,其中ADO.NET程序管理器写道:“这种行为是设计的 - DataSet不支持混合内容XML / XSD。” / p>
问题2 - 这表明了从XML / XSD入手并尝试将其转换为DataSet的危险。这导致我们重新思考我们的方法,目的是首先从DataSet开始,然后让XML格式从中派生出来,而不是相反。
(还欢迎任何人的想法!)