不能向包含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列的表添加嵌套关系或元素列"
您的问题是在文档的某个地方有相同的元素名称和不同的结构。
例如,如果你有
<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'节点。所以我只取回&给定数据集进行处理。
我希望它帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!