获取xml文件中标签之间的数据

发布于 2024-11-13 12:15:34 字数 2808 浏览 3 评论 0原文

我想获取以下 XML 中 标记之间的数据:

<viewport>
 <southwest>
  <lat>41.7450495</lat>
  <lng>-87.8859170</lng>
 </southwest>
</viewport>

这是更大 XML 的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>locality</type>
  <type>political</type>
  <formatted_address>Chicago, IL, USA</formatted_address>
  <address_component>
   <long_name>Chicago</long_name>
   <short_name>Chicago</short_name>
   <type>locality</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Cook</long_name>
   <short_name>Cook</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Illinois</long_name>
   <short_name>IL</short_name>
   <type>administrative_area_level_1</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>United States</long_name>
   <short_name>US</short_name>
   <type>country</type>
   <type>political</type>
  </address_component>
  <geometry>
   <location>
    <lat>41.8781136</lat>
    <lng>-87.6297982</lng>
   </location>
   <location_type>APPROXIMATE</location_type>
   <viewport>
    <southwest>
     <lat>41.7450495</lat>
     <lng>-87.8859170</lng>
    </southwest>
    <northeast>
     <lat>42.0109012</lat>
     <lng>-87.3736794</lng>
    </northeast>
   </viewport>
   <bounds>
    <southwest>
     <lat>41.6443350</lat>
     <lng>-87.9402669</lng>
    </southwest>
    <northeast>
     <lat>42.0231310</lat>
     <lng>-87.5236609</lng>
    </northeast>
   </bounds>
  </geometry>
 </result>
</GeocodeResponse>

现在,我'我尝试使用此代码来解析它:

string url = "http://maps.googleapis.com/maps/api/geocode/xml?address="+address+"&sensor=false";
WebClient client = new WebClient();

string result = client.DownloadString(url);

var element = XElement.Parse(result);
var lat = (double)element.Element("lat");
var lng = (double)element.Element("lng");

但它不起作用,元素为 null。我该怎么做?

I want to get the data between the <lat> and <lng> tags in the following XML:

<viewport>
 <southwest>
  <lat>41.7450495</lat>
  <lng>-87.8859170</lng>
 </southwest>
</viewport>

which is part of a bigger XML:

<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>locality</type>
  <type>political</type>
  <formatted_address>Chicago, IL, USA</formatted_address>
  <address_component>
   <long_name>Chicago</long_name>
   <short_name>Chicago</short_name>
   <type>locality</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Cook</long_name>
   <short_name>Cook</short_name>
   <type>administrative_area_level_2</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>Illinois</long_name>
   <short_name>IL</short_name>
   <type>administrative_area_level_1</type>
   <type>political</type>
  </address_component>
  <address_component>
   <long_name>United States</long_name>
   <short_name>US</short_name>
   <type>country</type>
   <type>political</type>
  </address_component>
  <geometry>
   <location>
    <lat>41.8781136</lat>
    <lng>-87.6297982</lng>
   </location>
   <location_type>APPROXIMATE</location_type>
   <viewport>
    <southwest>
     <lat>41.7450495</lat>
     <lng>-87.8859170</lng>
    </southwest>
    <northeast>
     <lat>42.0109012</lat>
     <lng>-87.3736794</lng>
    </northeast>
   </viewport>
   <bounds>
    <southwest>
     <lat>41.6443350</lat>
     <lng>-87.9402669</lng>
    </southwest>
    <northeast>
     <lat>42.0231310</lat>
     <lng>-87.5236609</lng>
    </northeast>
   </bounds>
  </geometry>
 </result>
</GeocodeResponse>

Right now, I'm trying to use this code to parse it:

string url = "http://maps.googleapis.com/maps/api/geocode/xml?address="+address+"&sensor=false";
WebClient client = new WebClient();

string result = client.DownloadString(url);

var element = XElement.Parse(result);
var lat = (double)element.Element("lat");
var lng = (double)element.Element("lng");

but it isn't working, element is null. How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鼻尖触碰 2024-11-20 12:15:34

不要使用正则表达式,解析它。这使用 LINQ to XML。

这应该适合你:

var doc = XDocument.Parse(result);
var sw = doc.Descendants("viewport").Elements("southwest").SingleOrDefault();
if (sw != null)
{
    var lat = (double)sw.Element("lat");
    var lng = (double)sw.Element("lng");
    // do stuff
}

Don't use a regular expression, parse it. This uses LINQ to XML.

This should work for you:

var doc = XDocument.Parse(result);
var sw = doc.Descendants("viewport").Elements("southwest").SingleOrDefault();
if (sw != null)
{
    var lat = (double)sw.Element("lat");
    var lng = (double)sw.Element("lng");
    // do stuff
}
一身软味 2024-11-20 12:15:34

与 DOTALL (s) 标志一起使用

.*<lat>([^<]*)</lat>.*<lng>([^<]*)</lng>.*

,捕获组返回纬度和经度。

Use

.*<lat>([^<]*)</lat>.*<lng>([^<]*)</lng>.*

with DOTALL (s) flag and the capturing groups return the latitude and longitude.

那一片橙海, 2024-11-20 12:15:34

下面的代码工作正常......

WebClient client = new WebClient();
string result = client.DownloadString(url);
var element = XElement.Parse(result);
var lat = element.Descendants("lat").First();
var lng = element.Descendants("lng").First();

The below code works fine....

WebClient client = new WebClient();
string result = client.DownloadString(url);
var element = XElement.Parse(result);
var lat = element.Descendants("lat").First();
var lng = element.Descendants("lng").First();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文