无法将嵌套关系或元素列添加到包含SimpleContent列的表中

时间:2011-09-23 14:27:09

标签: c# asp.net database

嗨,我写了这段代码

 XmlTextReader read = new XmlTextReader("http://msdn.microsoft.com/rss.xml");
        DataSet ds = new DataSet();
        ds.ReadXml(read);
        ListView1.DataSource = ds.Tables[4];
        ListView1.DataBind(); "

这个错误正在讨厌

“无法将嵌套关系或元素列添加到包含SimpleContent列的表”

4 个答案:

答案 0 :(得分:8)

您的问题是您在文档中的某个位置具有相同的元素名称。

所以,例如,如果你有

<Item>Bicycle</Item>

以及稍后的文档

<Item Type="Sports"><Name>Bicycle</Name></Item>

XSD将无法为第二个Item属性结构生成正确的模式,因为它已根据之前的声明将Item定义为SimpleContent列。

解决方案是(自然地)避免在XML中为不同的结构使用相同的元素名称。显然,在你的情况下,由于微软拥有相关的XML,因此很不方便(假设,因为Deni的评论表明该网站不再存在。)你必须使用XMLWriter或某些变体来替换有问题的元素的名称为了一些独特的东西。

答案 1 :(得分:0)

看起来您的xml包含一个既包含文本子项(简单内容)又包含其他元素子元素的元素。

DataSet不允许表同时包含简单内容列和元素列。

请参阅http://msdn2.microsoft.com/en-us/library/zx8h06sz.aspx

答案 2 :(得分:0)

在我的情况下,此错误出现在WCF客户端。在WCF服务器端,它是由于缺少对函数的SQL SELECT权限 - System.Data.SqlClient.SqlException引起的。

WCF客户端尝试反序列化数据集(显然不存在),继续显示&#34;无法添加SimpleContent ...&#34;错误。我不会称之为误导性消息,而是必须正确解释的消息。

答案 3 :(得分:0)

我认为当您从服务调用从Responsetext尝试ReadXml时,将显示此错误。在这种情况下,只需获取outerxml格式所需的必要节点属性。那些不需要的人跳过那个元素。

E.g

 var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
                XmlDocument doc = new XmlDocument();
                DataSet ds = new DataSet();
                doc.LoadXml(responseString);

                foreach (XmlNode node in doc.SelectNodes("result/records"))
                {
                    doc = new XmlDocument();
                    doc.LoadXml(node.OuterXml.ToString());
                }

                using (XmlReader reader = new XmlNodeReader(doc.DocumentElement))
                {
                    ds.ReadXml(reader);
                    reader.Close();
                }

在上面的示例中,我只想在响应流中使用“记录”节点。所以我只取得那个&amp;给予数据集进行处理。

我希望它有所帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!