首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C# WP8中解析xml

在C# WP8中解析xml
EN

Stack Overflow用户
提问于 2014-05-20 14:59:17
回答 1查看 150关注 0票数 0

我是windows phone的新手,所以我不知道如何解析从互联网上检索到的文档。

现在,我可以得到它和打印在它通过控制台。我希望设置在poi类实例中检索到的每个POI,其中包含来自xml的所有字段。

通过这个,我打印了xml:

代码语言:javascript
复制
XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
System.Diagnostics.Debug.WriteLine(xdoc.FirstNode.ToString());

我的类POI有以下字段:

字符串:名称,描述,拇指,url;双打: lat,lon

我的xml看起来是这样的:

代码语言:javascript
复制
        <?xml version="1.0" encoding="utf-8"?>
        <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:default="http://www.opengis.net/kml/2.2" 
         default:ar="http://www.openarml.org/arml/1.0"
         default:wikitude="http://www.openarml.org/wikitude/1.0">
         <Document>
                  <ar:provider xmlns:ar="http://www.openarml.org/arml/1.0"
                       id="myid.com">
                  <ar:name>Name of the owner</ar:name>
                  <ar:description><![CDATA[Description of the xml]]></ar:description>
                  <wikitude:providerUrl xmlns:wikitude="http://www.openarml.org/wikitude/1.0">www.webpage.es</wikitude:providerUrl>
                  <wikitude:tags xmlns:wikitude="http://www.openarml.org/wikitude/1.0">tag1,tag2,tag3,tag4</wikitude:tags>
                  <wikitude:logo xmlns:wikitude="http://www.openarml.org/wikitude/1.0">http://mylogourl.png</wikitude:logo>
                  <wikitude:icon xmlns:wikitude="http://www.openarml.org/wikitude/1.0">www.myiconurl.png</wikitude:icon></ar:provider>

        <default:Placemark id="id53">
              <ar:provider xmlns:ar="http://www.openarml.org/arml/1.0">myid.com</ar:provider>
              <default:name>PLACE</default:name>
              <default:description><![CDATA[Description of the place.]]></default:description>
              <wikitude:info xmlns:wikitude="http://www.openarml.org/wikitude/1.0">
                <wikitude:thumbnail>http://urltothethumbnail/</wikitude:thumbnail>
                <wikitude:url>http://urltotheplace.com</wikitude:url>
              </wikitude:info>
              <default:Point>
                <default:coordinates>-3.0000000000,43.0000000000,0</default:coordinates>
              </default:Point>
            </default:Placemark>


             </default:Document>
        </default:kml>

我有很多placemarks (POI),都有相同的字段。我想要一个包含所有POI的数组。

我尝试过这样的方法,但它使用count表示0:

代码语言:javascript
复制
var pois = xdoc.Root
            .Elements("Placemark")
            .Select(poi => new POI(
                       (String)stop.Attribute("name"),
                       (String)stop.Attribute("description"),
                       (String)stop.Attribute("thumbnail"),
                       (String)stop.Attribute("url"),
                       (Double)stop.Attribute("lat"),
                       (Double)stop.Attribute("lon")))
            .ToList();

如果我能得到placemark的id,那就很有用了。我可以在POI类中添加另一个var。

编辑:我尝试了一个用户在他的回答中说,它崩溃了,给出了一个例外: System.ArgumentNullException发生在System.Xml.Linq.ni.dll.我添加了修改后的代码:

代码语言:javascript
复制
XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
XNamespace ns = "http://www.opengis.net/kml/2.2";
            var placemarks = xdoc.Root.Descendants(ns + "Placemark");


            var pois = placemarks
            .Select(poi => new POI(
                       (String)poi.Attribute("name"),
                       (String)poi.Attribute("description"),
                       (String)poi.Attribute("thumbnail"),
                       (String)poi.Attribute("url"),
                       (Double)poi.Attribute("lat"),
                       (Double)poi.Attribute("lon")))
            .ToList();


            System.Diagnostics.Debug.WriteLine(pois.Count);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 15:48:11

原始文章中的下列代码:

代码语言:javascript
复制
xdoc.Root.Elements("Placemark")

不返回任何结果,因为Placemark元素不是数据中的根元素。另外,您还没有指定名称空间。如果您想获取文档中的所有Placemark元素,不管它们位于何处,那么您可以这样做:

代码语言:javascript
复制
XNamespace ns = "http://www.opengis.net/kml/2.2";
var placemarks = xdoc.Root.Descendants(ns + "Placemark");

您的原始代码也将无法检索其他信息(名称、描述、缩略图等)。因为这些数据实际上都没有存储在属性中。所有这些都包含在元素中,而不是属性中,在查询它们时还需要指定正确的命名空间(参见上面示例中如何指定名称空间)。最后,请注意,纬度、经度、缩略图和url数据包含在子元素中。为了查询这些信息,您必须获取信息和Point元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23763358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档