使用asp.net c从具有相同名称的XML读取子节点

时间:2016-05-19 06:34:05

标签: c# asp.net xml webforms

考虑以下XML。我想从特定的父节点读取特定的子节点值。

**<response>
   <Statuses>
       <Detail>
           <number>123</number>
       </Detail>
       <ToDate>
           <date>1/1/2000</date>
       </ToDate>
       <FromDate>
           <date>1/1/2000</date>
       </FromDate>
   </Statuses>
</response>**

我想从&#34; fromDate&#34;中读取日期值。标签以及详细信息标签中的数字。

我试过了,

If(reader.name.Equals("Statuses"StringComparison.CurrentCultureIgnoreCase)
{
dateValue=reader.GetAttribute("/FromDate/Date");
}

这不起作用。请建议。

1 个答案:

答案 0 :(得分:1)

我同意Jon Skeet你真的应该使用LINQ to XML来完成这些类型的任务。它会让你的生活更轻松:

Sameple XML文件:

<response>
  <Statuses>
    <Detail>
      <number>123</number>
    </Detail>
    <ToDate>
      <date>1/1/2000</date>
    </ToDate>
    <FromDate>
      <date>1/1/2000</date>
    </FromDate>
  </Statuses>
  <Statuses>
    <Detail>
      <number>1234</number>
    </Detail>
    <ToDate>
      <date>1/1/2000</date>
    </ToDate>
    <FromDate>
      <date>1/1/2001</date>
    </FromDate>
  </Statuses>
</response>

<强>代码:

using System;
using System.Linq;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //If the xml file is in the solution - set Build Action of the file to "Embedded Resource" 
            //and Copy to Output Directory to "Copy always"
            var doc = XDocument.Load("input.xml");

            doc.Element("response").Elements().ToList().ForEach(e =>
                {
                    string number = e.Element("Detail").Element("number").Value;
                    string date = e.Element("FromDate").Element("date").Value;

                    Console.WriteLine("Number - {0}.Date - {1}\n", number, date);
                });

            Console.ReadKey();
        }
    }
}

<强>输出:

Output in Visual Studio