Windows Phone 7:将网站XML解析为XDocument
本文关键字:XDocument XML 网站 Phone Windows | 更新日期: 2023-09-27 18:04:21
我似乎在WP7上有一个问题,试图从一个网站解析XML。由于某种原因,它从来没有繁殖过。没有错误,xml看起来很好,我正在指定NS,但仍然没有。
我是不是错过了一些非常简单的东西?4个小时过去了,我还在用头撞桌子。
我的c#技能只有2个月,所以可能是我(很可能是)。
这是我的代码,我用来解析从网站收到的XML…
public void ParseCallSignData(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
string s = e.Result;
XDocument doc;
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Ignore;
using (XmlReader reader = XmlReader.Create(new StringReader(s), settings))
{
doc = XDocument.Load(reader);
}
XNamespace ns = @"http://www.qrz.com";
var calldata = from query in doc.Descendants(ns + "Callsign")
select new callsign
{
call = (string)query.Element(ns +"call")
};
这是我要解析的XML。
<?xml version="1.0" encoding="iso-8859-1" ?>
- <QRZDatabase version="1.18" xmlns="http://www.qrz.com">
- <Callsign>
<call>W7EIX</call>
<dxcc>223</dxcc>
<fname>DICK</fname>
<name>TONITON</name>
<country>United States</country>
<lat>25.586910</lat>
<lon>-95.039318</lon>
<grid>EL29lo</grid>
<county>Harris</county>
<ccode>271</ccode>
<land>England</land>
<class>A</class>
<codes>ETP</codes>
<qslmgr>DIRECT PREFERRED NO SAE REQUIRED!</qslmgr>
<u_views>1716</u_views>
<moddate>2010-07-05 19:32:12</moddate>
<MSA>3360</MSA>
<AreaCode>713</AreaCode>
<TimeZone>Central</TimeZone>
<GMTOffset>-6</GMTOffset>
<DST>Y</DST>
<eqsl>1</eqsl>
<mqsl>1</mqsl>
<cqzone>0</cqzone>
<ituzone>0</ituzone>
<locref>3</locref>
<born>1968</born>
<lotw>1</lotw>
</Callsign>
- <Session>
<Key>afff7a6dfdff36f68fffb7dfff49fc7</Key>
<Count>18</Count>
<SubExp>Mon Sep 19 07:00:00 2011</SubExp>
<GMTime>Wed Aug 3 21:06:58 2011</GMTime>
<Remark>cpu: 0.073s</Remark>
</Session>
</QRZDatabase>
这些' -
'字符看起来很可疑。他们不应该在那里。(…虽然这可能是浏览器剪切粘贴的产物)
三个月后,但对于那些想知道的人。我在我的应用程序中使用了一些更简单的东西:
string s = e.Result;
// Load the document
XDocument xdoc = XDocument.Parse(xml);
// Get the datas you want using doc.Element("...").Element("...")...
// to go down your XML doc
var calldata = from query in doc.Element("Callsign")
select new callsign
{
call = query.Element("call").Value
};
希望对大家有所帮助。