2011-09-23 8 views
6

こんにちはiamこのコードを書くSimpleContent列を含むテーブルにネストされたリレーションまたは要素列を追加できません

 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

この例のurlは404リソースが見つかりません –

答えて

0

xmlにはテキストの子要素(単純コンテンツ)とその他の要素が含まれているようです要素の子要素。

DataSetでは、単純なコンテンツ列と要素列の両方をテーブルに含めることはできません。

はあなたの問題は、あなたがどこかに文書の異なる構造で同じ要素名を持っているhttp://msdn2.microsoft.com/en-us/library/zx8h06sz.aspx

8

を参照してください。

したがって、たとえば、あなたが

<Item>Bicycle</Item> 

、後であなたがそれだからXSDは、2番目の項目の属性構造のための適切なスキーマを生成するために失敗します

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

持つ文書のを持っている場合以前に宣言されたSimpleContent列としてすでに定義されているItem。

解決策は、XML内の異なる構造に同じ要素名を使用することを(自然に)避けることです。明らかに、あなたのケースでは、Microsoftが問題のXMLを所有しているので不都合です(Deniのコメントから、このサイトはもう存在しないと仮定しているためです)。XMLWriterまたは別のバリアントを使用して、ユニークなもののために。

0

私の場合、このエラーはWCFクライアント側で発生しました。 WCFサーバー側では、関数 - System.Data.SqlClient.SqlExceptionにSQL SELECT権限がないために発生しました。

明らかに存在しなかったデータセットを逆シリアル化しようとするWCFクライアントは、「SimpleContentを追加できません...」というエラーを表示し続けました。私は誤解を招くようなメッセージではなく、適切に解釈されなければならないメッセージです。

0

サービスコールからのResponsesetextからReadXmlを試そうとしているときにこのエラーが表示されると思います。このケースでは、必要なノード属性をouterxml形式で取得します。必要がない人は、その要素をスキップします。上記の例で

例えば

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(); 
       } 

私は、応答ストリームで唯一の「レコードの」ノードをしたいです。そのため、処理のためにデータセットに与えられたのは&です。

私はそれが役に立てば幸い!!!!!!!!!!!!!!!!!!!!!!!!!!!

関連する問題