0

次の GeoCodeRespose xml から、ac# プログラムで xpath を使用して、地域、ルート、番地の値を抽出する方法を教えてください。

<GeocodeResponse> 
<status>OK</status>
 <result>
<type>street_address</type>
<formatted_address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA</formatted_address>
<address_component>
<long_name>1600</long_name>
<short_name>1600</short_name>
<type>street_number</type>
</address_component>
<address_component>
<long_name>Amphitheatre Pkwy</long_name>
<short_name>Amphitheatre Pkwy</short_name>
<type>route</type>
</address_component>
<address_component>
<long_name>Mountain View</long_name>
<short_name>Mountain View</short_name>
<type>locality</type>
<type>political</type>
</address_component>
</result>
</GeocodeResponse>

これまでのところ、xmlドキュメントでxmlを取得でき、以下のようにフォーマットされたアドレスの値を取得できます

   XmlDocument doc=GetGeoCodeXMLResponse();
   XPathDocument document = new XPathDocument(new XmlNodeReader(doc));
   XPathNavigator navigator = document.CreateNavigator();

   XPathNodeIterator resultIterator = navigator.Select("/GeocodeResponse/result");
        while (resultIterator.MoveNext())
        {

            XPathNodeIterator formattedAddressIterator = resultIterator.Current.Select("formatted_address");
            while (formattedAddressIterator.MoveNext())
            {
               string FullAddress = formattedAddressIterator.Current.Value;

            }
        }
4

2 に答える 2

1

XML に一貫性がある場合、これがおそらく最も簡単な方法です。

XML を表すオブジェクトを作成します。

public GeocodeResponse
{
  public string Status { get; set; }
  public Result Result { get; set; }

  public class Result
  {
    public string type { get; set; }
    public string formatted_address { get; set; }
    // etc..
  }
}

XML でのオブジェクトの逆シリアル化。

var serializer = new XmlSerializer(typeof(GeocodeResponse));
GeocodeResponse geocodeReponse = 
  (GeocodeResponse)serializer.Deserialize(xmlAsString);
于 2013-10-13T02:33:04.540 に答える
0

を使用できますLinqToXml。これを試してみると、必要なすべてのプロパティを備えた匿名型が得られます。

 var xDoc = XDocument.Parse(xmlString);

 var result = xDoc.Descendants("result").Select(c =>
              new
              {
                FormattedAddress = c.Element("formatted_address").Value,
                StreetNumber = c.Descendants("address_component")
                        .First(e => e.Element("type").Value == "street_number").Element("short_name").Value,
                Route = c.Descendants("address_component")
                        .First(e => e.Element("type").Value == "route").Element("short_name").Value,
                Locality = c.Descendants("address_component")
                        .First(e => e.Element("type").Value == "locality").Element("short_name").Value
          }).First();
于 2013-10-13T00:35:47.587 に答える