public sealed partialclass MainPage : Page
{
//首先獲取BingMaps Key. 進(jìn)入http://www.bingmapsportal.com/
private string bingMapKey ="AnkX_4CsugRTUgfirUGvvEsSDd79n2PGur5p6DJ6JL6CbBOAM3VKGx3fTABgiKpx";
public MainPage()
{
this.InitializeComponent();
}
private async void XLinqQuery_Click(objectsender, RoutedEventArgs e)
{
try
{
string cities = awaitProcessWithXLinq();
this.msiTextBlock.Text =cities;
}
catch(System.Xml.XmlException ex)
{
this.msiTextBlock.Text ="Exception happened, Message:" + ex.Message;
}
}
private async Task ProcessWithXLinq()
{
Uri uri =newUri(String.Format("http://dev.virtualearth.net/REST/v1/Locations?q=manchester&o=xml&key={0}",bingMapKey));
HttpClientclient = new HttpClient();
HttpResponseMessage response = await client.GetAsync(uri);
response.EnsureSuccessStatusCode();
Streamstream = await response.Content.ReadAsStreamAsync();
XDocumentxdoc = XDocument.Load(stream);
XNamespacexns = "http://schemas.microsoft.com/search/local/ws/rest/v1";
varaddresses = from node in xdoc.Descendants(xns + "Address") // querynode named "Address"
where node.Element(xns +"CountryRegion").Value.Contains("United States") // where CountryRegion contains "UnitedStates"
select node.Element(xns +"FormattedAddress").Value; // select the FormattedAddress node'svalue
StringBuilder stringBuilder = new StringBuilder("Manchester in US:");
foreach(string name in addresses)
stringBuilder.Append(name +"; ");
returnstringBuilder.ToString();
}
private async void XmlQuery_Click(object sender,RoutedEventArgs e)
{
stringfilename = "manchester_us.xml";
try
{
awaitProcessWithReaderWriter(filename);
using (Stream s = awaitKnownFolders.PicturesLibrary.OpenStreamForReadAsync(filename))
{
using (StreamReader sr = newStreamReader(s))
{
this.msiTextBlock.Text = sr.ReadToEnd();
}
}
}
catch(UnauthorizedAccessException ex)
{
this.msiTextBlock.Text ="Exception happend, Message:" + ex.Message;
}
}
private async TaskProcessWithReaderWriter(string filename)
{
Uri uri =newUri(String.Format("http://dev.virtualearth.net/REST/v1/Locations?q=manchester&o=xml&key={0}",bingMapKey));
WebRequestrequest = WebRequest.Create(uri);
// ifneeded, specify credential here
//request.Credentials = new NetworkCredential();
WebResponse response = await request.GetResponseAsync();
StreaminputStream = response.GetResponseStream();
XmlReaderSettings xrs = new XmlReaderSettings() { Async = true,CloseInput = true };
using(XmlReader reader = XmlReader.Create(inputStream, xrs))
{
XmlWriterSettings xws = newXmlWriterSettings() { Async = true, Indent = true, CloseOutput =true };
Stream outputStream = awaitKnownFolders.PicturesLibrary.OpenStreamForWriteAsync(filename,CreationCollisionOption.OpenIfExists);
using (XmlWriter writer =XmlWriter.Create(outputStream, xws))
{
string prefix = "";
string nameSpace = "";
await writer.WriteStartDocumentAsync();
await writer.WriteStartElementAsync(prefix,"Locations", nameSpace);
while (await reader.ReadAsync())
{
if(reader.NodeType == XmlNodeType.Element && reader.Name =="Address")
{
using (XmlReader subReader =reader.ReadSubtree())
{
bool isInUS = false;
while (await subReader.ReadAsync())
{
if(subReader.Name == "CountryRegion")
{
string value = awaitsubReader.ReadInnerXmlAsync();
if (value.Contains("UnitedStates"))
isInUS = true;
}
if (isInUS&& subReader.NodeType == XmlNodeType.Element &&subReader.Name == "FormattedAddress")
awaitwriter.WriteNodeAsync(subReader, false);//寫入操作: subReader->Stream
}
}
}
}
await writer.WriteEndElementAsync();
await writer.WriteEndDocumentAsync();
}
}
}
}