嗨,我写了这段代码
“
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列的表”
答案 0 :(得分:8)
您的问题是您在文档中的某个位置具有相同的元素名称。
所以,例如,如果你有
<Item>Bicycle</Item>
以及稍后的文档
<Item Type="Sports"><Name>Bicycle</Name></Item>
XSD将无法为第二个Item属性结构生成正确的模式,因为它已根据之前的声明将Item定义为SimpleContent列。
解决方案是(自然地)避免在XML中为不同的结构使用相同的元素名称。显然,在你的情况下,由于微软拥有相关的XML,因此很不方便(假设,因为Deni的评论表明该网站不再存在。)你必须使用XMLWriter或某些变体来替换有问题的元素的名称为了一些独特的东西。
答案 1 :(得分:0)
看起来您的xml包含一个既包含文本子项(简单内容)又包含其他元素子元素的元素。
DataSet不允许表同时包含简单内容列和元素列。
答案 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;给予数据集进行处理。
我希望它有所帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!