不能向包含SimpleContent列的表添加嵌套关系或元素列

本文关键字:嵌套 关系 元素 添加 包含 SimpleContent 不能 | 更新日期: 2023-09-27 18:09:25

这段代码是我写的

"

 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列的表添加嵌套关系或元素列"

不能向包含SimpleContent列的表添加嵌套关系或元素列

您的问题是在文档的某个地方有相同的元素名称和不同的结构。

例如,如果你有

<Item>Bicycle</Item>

然后在文档中有

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

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

解决方案是(自然地)避免对XML中的不同结构使用相同的元素名称。显然,在您的情况下,这有点不方便,因为Microsoft拥有所讨论的XML(假设,因为来自Deni的评论表明该站点已不复存在)。您必须使用XMLWriter或某种变体来将违规元素的名称替换为唯一的名称。

看起来你的xml包含了一个元素,它有文本子元素(简单内容)和其他元素子元素。

DataSet不允许一个表同时拥有简单的内容列和元素列。

见http://msdn2.microsoft.com/en-us/library/zx8h06sz.aspx

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

WCF客户端试图反序列化数据集,显然不存在,一直显示"不能添加一个简单内容…"错误。我不认为这是一个误导性的信息,而是一个必须正确解释的信息。

我认为当您试图从服务调用的Responsetext读取xml时,此错误将显示。在这种情况下,只需获取必要的节点属性,您需要在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();
                }

在上面的例子中,我只想要响应流中的'records'节点。所以我只取回&给定数据集进行处理。

我希望它帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!