如何使用xml reader获取innerXML属性值

时间:2012-03-09 22:15:11

标签: c# xml xmlreader

我遇到与示例here

类似的情况

如何检索具有给定ISBN的图书的“价格”和“标题”值?

1 个答案:

答案 0 :(得分:4)

以下是一个例子:

class Program
{
    static void Main()
    {
        var xml =
        @"
        <bookstore>
          <book genre='novel' ISBN='10-861003-324'>
            <title>The Handmaid's Tale</title>
            <price>19.95</price>
          </book>
          <book genre='novel' ISBN='1-861001-57-5'>
            <title>Pride And Prejudice</title>
            <price>24.95</price>
          </book>
        </bookstore>
        ";
        using (var reader = new StringReader(xml))
        using (var xmlReader = XmlReader.Create(reader))
        {
            var bookFound = false;
            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "book")
                {
                    var isbn = xmlReader.GetAttribute("ISBN");
                    bookFound = isbn == "1-861001-57-5";
                }

                if (bookFound && xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "title")
                {
                    Console.WriteLine("title: {0}", xmlReader.ReadElementContentAsString());
                }
                if (bookFound && xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "price")
                {
                    Console.WriteLine("price: {0}", xmlReader.ReadElementContentAsString());
                }
            }
        }
    }
}

如果您正在阅读的XML文件不是很大并且可以放入内存中,您可以使用XDocument来解析它:

var doc = XDocument.Parse(xml);
var result =
    (from book in doc.Descendants("book")
     where book.Attribute("ISBN").Value == "1-861001-57-5"
     select new
     {
         Title = book.Element("title").Value,
         Price = book.Element("price").Value
     }).FirstOrDefault();
if (result != null)
{
    Console.WriteLine("title: {0}, price: {1}", result.Title, result.Price);
}