Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#WP8中解析xml_C#_Xml_Windows Phone 8 - Fatal编程技术网

在C#WP8中解析xml

在C#WP8中解析xml,c#,xml,windows-phone-8,C#,Xml,Windows Phone 8,我对windows phone比较陌生,所以我不知道如何解析从internet检索到的文档 现在我可以通过控制台获取并打印它。我想设置在我的poi类的一个实例中检索到的每个poi,该实例包含xml中的所有字段 通过这种方式,我可以打印xml: XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None); System.Diagnostics.Debug.WriteLine(xdoc.FirstNode.ToString()); 我的

我对windows phone比较陌生,所以我不知道如何解析从internet检索到的文档

现在我可以通过控制台获取并打印它。我想设置在我的poi类的一个实例中检索到的每个poi,该实例包含xml中的所有字段

通过这种方式,我可以打印xml:

XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
System.Diagnostics.Debug.WriteLine(xdoc.FirstNode.ToString());
我的类POI具有以下字段:

字符串:名称、描述、缩略图、url;双人:拉特,朗

我的xml如下所示:

        <?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>
XNamespace ns = "http://www.opengis.net/kml/2.2";
var placemarks = xdoc.Root.Descendants(ns + "Placemark");
如果我能得到placemark的id,它会很有用。我可以向POI类添加另一个变量

编辑:我尝试了一位用户在回答中所说的,但由于给出了一个异常而崩溃:System.ArgumentNullException发生在System.Xml.Linq.ni.dll中。。。我添加了修改后的代码:

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);

您的原始帖子中包含以下代码:

xdoc.Root.Elements("Placemark")
不会返回任何结果,因为Placemark元素不是数据中的根元素。另外,您还没有指定名称空间。如果希望获取文档中的所有Placemark元素,而不管它们可能位于何处,则可以执行以下操作:

        <?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>
XNamespace ns = "http://www.opengis.net/kml/2.2";
var placemarks = xdoc.Root.Descendants(ns + "Placemark");

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

请参阅我的更新问题。我对你的回答有一个例外。也许我误解了你。我修改了我的答案,以解决你原始代码中的一些其他问题。我已经尝试过了,它存储了我所有的POI。现在我将尝试将子元素添加到我的POI中(我删除以测试它),但我将自己尝试,并记住您的答案。谢谢