C# SQLXML 反序列化为 Class 或对象

C# SQLXML Deserialization to Class or Object

http://rtt.metroinfo.org.nz/RTT/Public/Utility/File.aspx?ContentType=SQLXML&Name=JPPlatform.xml

http://rtt.metroinfo.org.nz/RTT/Public/Utility/File.aspx?Name=JPRoutePositionET.xml&ContentType=SQLXML&PlatformTag=536

这两个都是我使用HttpClient拉下来的示例数据,我想抓取PlatformTagETA等属性(?)。

这是为 Windows 10 移动设备和桌面设备使用的通用应用程序。但是我不知道这是怎么回事。

XDocument Document =  XDocument.Parse(RESPONSE_CONSTANT);
var Stops = from Stop in Document.Descendants("Platform")
select new
{
Platformtag = (string)Stop.Attribute("PlatformTag"),
Platformno = (string)Stop.Attribute("PlatformNo")};
foreach (var item in Stops)
BusData.Text = item.Platformtag;
}

这是我目前拥有的,但没有任何结果,它只是坐在那里,就像什么也看不见,从这里我对XML解析了解不多,无法找到下一步。

注意:Response_Constant 包含这样的数据:http://rtt.metroinfo.org.nz/RTT/Public/Utility/File.aspx?Name=JPRoutePositionET.xml&ContentType=SQLXML&PlatformTag=536

试试看。必须修改 xml 以替换符号。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace ConsoleApplication14
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            string xml = File.ReadAllText(FILENAME);
            xml = xml.Replace("&", "&");
            StringReader sReader = new StringReader(xml);
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader reader = XmlReader.Create(sReader);

            List<Platform> platforms = new List<Platform>();
            while (!reader.EOF)
            {
                if (reader.Name != "Platform")
                {
                    reader.ReadToFollowing("Platform");
                }
                if (!reader.EOF)
                {
                    XElement platform = (XElement)XElement.ReadFrom(reader);

                    platforms.Add(new Platform()
                    {
                        tag = (int)platform.Attribute("PlatformTag"),
                        no = (int?)platform.Attribute("PlatformNo"),
                        name = (string)platform.Attribute("Name"),
                        bearingToRoad = (double?)platform.Attribute("BearingToRoad"),
                        roadName = (string)platform.Attribute("RoadName"),
                        lat = (double)platform.Element(platform.Name.Namespace + "Position").Attribute("Lat"),
                        _long = (double)platform.Element(platform.Name.Namespace + "Position").Attribute("Long")
                    });
                }
            }
        }
    }
    public class Platform
    {
        public int tag { get; set; }
        public int? no { get; set; }
        public string name { get; set; }
        public double? bearingToRoad { get; set; }
        public string roadName { get; set; }
        public double lat { get; set; }
        public double _long { get; set; }
    }
}