1
<?xml version="1.0"?>

-<bookstore>            
        <book > 
            <title>aaaa</title> 
            -<author > 
                <first-name>firts</first-name> 
                <last-name>last</last-name> 
            </author> 
            <price>8.23</price> 
            <otherbooks>
                    <book > 
                        <title>bbb</title>      
                        <price>18.23</price> 
                    </book>     
                    <book > 
                        <title>ccc</title>      
                        <price>11.22</price> 
                    </book>     
            </otherbooks>
        </book> 
</bookstore>

さまざまなレベルのすべての本を選択してから、各本に関する情報(著者、タイトル、価格)を表示したいと思います。現時点では、コードは最初の本の他の本も表示します。必要な情報だけを表示する最良の方法は何でしょうか。XPathを使用する必要があります。

xPathDoc = new XPathDocument(filePath);
xPathNavigator = xPathDoc.CreateNavigator();
XPathNodeIterator xPathIterator = xPathNavigator.Select("/bookstore//book");
foreach (XPathNavigator navigator in xPathIterator)
{
     XPathNavigator clone = navigator.Clone();
     clone.MoveToFirstChild();

     Console.WriteLine(clone.Name + " : " + clone.Value);
     while (clone.MoveToNext())
     {
         Console.Write(clone.Name + " : " + clone.Value + " | ");
     }
} 
4

2 に答える 2

1

Linq To Xmlを試してみる場合:

var xDoc = XDocument.Parse(xml); //or XDocument.Load(filename)
var books = xDoc.Root.Elements("book")
            .Select(b => new
            {
                Author = b.Element("author").Element("first-name").Value + " " +
                            b.Element("author").Element("last-name").Value,
                Books = b.Descendants("book")
                            .Select(x => new 
                            {
                                Title = x.Element("title").Value,
                                Price = (decimal)x.Element("price"),
                            })
                            .Concat(new[] { new { Title = b.Element("title").Value, 
                                                Price = (decimal)b.Element("price") } 
                                        })
                            .ToList()

            })
            .ToList();
于 2012-10-18T09:54:37.390 に答える
1

二重スラッシュ ( //) は、直接の子孫だけでなく、すべての子孫を指定しています。どうですか

/bookstore/book 

? これにより、トップレベルbookのみが取得されます。

于 2012-10-18T09:31:59.770 に答える