1

私はxmlを持っています:

<?xml version="1.0" encoding="utf-8" ?>
<books>
  <book>
    <author>Ray</author>
    <album>Other</album>
    <cover size="large">LargeCover</cover>
    <cover size="mini">MiniCover</cover>
  </book>
</books>

文字列「MiniCover」を取得するにはどうすればよいですか?

コードを書きましたが、機能しません—文字列が空です。

 string testLink = (@"Text.xml");

            XDocument xml = XDocument.Load(testLink);
            string cv = String.Empty;

            var c = from cover in xml.Elements("book")
                    where (string)cover.Attribute("size").Value == "mini"
                    select cover.Value;
            foreach (var item in c)
            {
                cv += item.ToString();
            }

            MessageBox.Show(cv);

ありがとう!

4

2 に答える 2

3

Xpath でコードを簡素化できます

var covers = xDoc.XPathSelectElements("//cover[@size='mini']").ToList();    

内部テキストを取得するには

var covers = xDoc.XPathSelectElements("//cover[@size='mini']")
                .Select(x => x.Value)
                .ToList(); 
于 2012-09-13T19:49:57.097 に答える
1

使用Elements()する場合は、構造をより正確に指定する必要があります。

あなたのコードでcoverは、<book>要素です。しかしsize、の属性です<cover>

    var c = from cover in xml.Elements("book")
                where (string)cover.Attribute("size").Value == "mini"
                select cover.Value;

これはうまくいくはずです:

    var c = from cover in xml.Elements("book")
                    .Elements("cover")
                where (string)cover.Attribute("size").Value == "mini"
                select cover.Value;
于 2012-09-13T19:49:11.527 に答える