1

where 句に基づいて xml ノードの CDATA セクションを読み込もうとしています。

<Book>
  <BookItem ISBN="SKS84747"><![CDATA[20]]> </BookItem>
  <BookItem ISBN="LHKGOI84747"><![CDATA[50]]> </BookItem>
  <BookItem ISBN="PUOT84747"><![CDATA[20]]> </BookItem>
</Book>

このコードにより、すべての CDATA セクションが得られます。

var value = from v in x.Descendants("BookItem").OfType<XCData>()
                                select (string)v.Value;

ISBN に基づいて where 句を配置する方法は? LINQ to XML を使用してこの CDATA を読み取るにはどうすればよいですか。

4

2 に答える 2

0
var xml = Resource1.String1;
var doc = XDocument.Parse(xml);
var isbn = "SKS84747";
var query = string.Format("BookItem[@ISBN='{0}']", isbn);
var book = doc.Root.XPathSelectElement(query);

if (book != null)
    Console.WriteLine(book.Value);

また

var book =
    doc.Root.Descendants("BookItem").Where(
        x => x.Attribute("ISBN") != null && x.Attribute("ISBN").Value == isbn).Select(x => x.Value).
        FirstOrDefault();

また

var book = (from item in doc.Root.Descendants("BookItem")
            where item.Attributes("ISBN").Any() && item.Attribute("ISBN").Value == isbn
            select item.Value).FirstOrDefault();
于 2012-06-08T11:52:29.263 に答える
0
var value = x.DescendantNodes().OfType<XCData>()
                .Where(m => m.Parent.Name == "BookItem" && m.Parent.Attribute("ISBN").Value == "PUOT84747")
                .ToList();

また

ToList() の前に

.Select(cdata => cdata.Value.ToString());
于 2012-06-08T11:44:28.943 に答える