0

私は実際にこの XML を読み取ろうとしています。

http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/xml/351352?res=3hourly&key=99b9f578-ad3d-446c-9d29-0bbee028b483

value="2012-11-15Z" を持つノード Period のみをどのように読み取ることができるのか疑問に思っていました

したがって、以下のもの:

これは私が使用するコードです

 using (XmlReader reader = XmlReader.Create("http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/xml/351352?res=3hourly&key=99b9f578-ad3d-446c-9d29-0bbee028b483"))
    {
        reader.MoveToContent();
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element
                && reader.Name == "Period")
            {
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element &&
                        reader.Name == "Rep")
                    {
                        first.Text = reader.GetAttribute("T");
                    }
                }


            }
        }
    }

このノードだけを読み取るにはどうすればよいですか?

書くべきか

if (reader.NodeType == XmlNodeType.Element && reader.Name == "Period" && reader.GetAttribute("value") == "2012-11-15Z")

これはうまくいかないようです..

誰かが私を助けることができますか?

4

2 に答える 2

2

これは、LINQ to XML を使用して簡単に行うことができます。

XDocument xdoc = XDocument.Load(path_to_xml);
var period = xdoc.Descendants("Period")
                 .Where(p => (string)p.Attribute("value") == "2012-11-15Z") 
                 .SingleOrDefault();

XElement が返されますが、期間から任意のデータを選択できます。例:T属性:

List<int> tList = xdoc.Descendants("Period")
                      .Where(p => (string)p.Attribute("value") == "2012-11-15Z")
                      .SelectMany(p => p.Elements())
                      .Select(rep => (int)rep.Attribute("T"))
                      .ToList();

var query = xdoc.Descendants("Period")
                .Where(p => (string)p.Attribute("value") == "2012-11-15Z")
                .SelectMany(p => p.Elements())
                .Select(rep => new { 
                      T = (int)rep.Attribute("T"),
                      D = (string)rep.Attribute("D") })
                .ToList();

T最後のクエリは、整数プロパティと文字列プロパティを持つ厳密に型指定された匿名オブジェクトのリストを返しDます。

 foreach(var x in query)
     // use x.T and x.D
于 2012-11-15T12:15:40.380 に答える
0

このような値を検索するために xpath を使用してみてください

XmlDocument doc = new XmlDocument();
using (XmlReader reader = XmlReader.Create("http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/xml/351352?res=3hourly&key=99b9f578-ad3d-446c-9d29-0bbee028b483"))
{
    doc.Load(reader);
    XmlNodeList list = doc.SelectNodes("//Period[@value='2012-11-15Z']");
    Console.WriteLine(list.Count);
}
于 2012-11-15T12:16:24.943 に答える