0

この xml ドキュメントを解析する必要があります (部分のみ):

<channel>
 <item>
   <title>a</title>
   <description>aa</description>
   <link url= "www.a.com" />
 </item>
<item>
   <title>b</title>
   <description>bb</description>
   <link url= "www.b.com" />
 </item>
<item>
   <title>c</title>
   <description>cc</description>
   <link url= "www.c.com" />
 </item>
<item>
   <title>d</title>
   <description>dd</description>
    <channelContents>
      <item>
         <title>a</title>
         <description>aa</description>
         <link url= "www.a.com" />
      </item>
      <item>
         <title>b</title>
         <description>bb</description>
         <link url= "www.b.com" />
      </item>
      <item>
         <title>c</title>
         <description>cc</description>
         <link url= "www.c.com" />
      </item>
    </channelContents>
 </item>
</channel>

これは私のコードです:

List<ItemList> itemList = null;
reader = XmlReader.Create(new StringReader(content));
loadedData = XDocument.Load(reader);
var query = from i in loadedData.Descendants("item")
    select new ItemList
    {
        Title = (string)i.Element("title"),
        Description = (string)i.Element("description"),
        Link = (string)i.Element("link").Attribute("url").Value
    };
itemList = query.ToList();

リンクを解析するたびにエラーが発生します。そして、その理由がわかったと思います。それはタグのせいです<channelContents>。タイトル「d」のアイテムには、説明の後にあるタグがあり、 のパターンに違反してい<item>ます。<channelContents>同じアイテム(a、b、c)があるため、アイテムを解析することは可能ですか?

エラーが発生します:

itemList が null であるため、NullReferenceException が発生します。

削除Link = (string)i.Element("link").Attribute("url").Valueしてみましたが、うまくいきました。しかし、リンクを取得する必要があります。

4

1 に答える 1

0

問題は、4 番目の項目に直接のリンク ノードがないことです。

  var query = from i in loadedData.Descendants("item")
                        select new 
                        {
                            Title = (string)i.Element("title"),
                            Description = (string)i.Element("description"),
                            Link = (string)i.Descendants("link").FirstOrDefault().Attribute("url").Value
                        };

あなたが望むことをするかもしれません.. 7つのノードを返します.. a、b、c、dそして再び別のa、b、c

于 2012-07-20T17:00:17.780 に答える