从服务引用访问和显示某些xml元素

时间:2015-07-19 22:59:20

标签: c# xml silverlight

我正在Silverlight中编写股票报价应用程序,我无法弄清楚如何只显示我想要的信息来自xml,例如股票的价格。它将显示标签和所有内容。

这是我的代码:

private void getQuote_Click(object sender, RoutedEventArgs e)
    {
        bool check = NetworkInterface.GetIsNetworkAvailable();
        if (check)
        {
            //available
            GetQuote.StockQuoteSoapClient client = new StockQuoteSoapClient();

            //call that method
            client.GetQuoteAsync(symbolBox.Text);




            //event handler response
            client.GetQuoteCompleted +=client_GetQuoteCompleted;

        }
        else
        {
            return;
        }

    }

    public void client_GetQuoteCompleted(object sender, GetQuoteCompletedEventArgs e)
    {


        result.Text = e.Result;
  }

这是由http://www.webservicex.net/stockquote.asmx?op=GetQuote

返回的xml
<string><StockQuotes><Stock><Symbol>msft</Symbol><Last>46.62</Last><Date>7/17/2015</Date><Time>4:00pm</Time><Change>-0.04</Change><Open>46.59</Open><High>46.78</High><Low>46.26</Low><Volume>29467107</Volume><MktCap>377.14B</MktCap><PreviousClose>46.66</PreviousClose><PercentageChange>-0.09%</PercentageChange><AnnRange>40.12 - 50.05</AnnRange><Earns>2.41</Earns><P-E>19.35</P-E><Name>Microsoft Corporation</Name></Stock></StockQuotes></string>

这适用于移动应用;它必须在每次使用时从Web服务提供新的,最新的信息,我只需要一些不同的信息。此外,信息不应该是专门的Microsoft,而是任何真实的公司,其股票代码由用户输入。

1 个答案:

答案 0 :(得分:0)

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<string>" +
                 "<StockQuotes>" +
                   "<Stock>" +
                     "<Symbol>msft</Symbol>" +
                     "<Last>46.62</Last>" +
                     "<Date>7/17/2015</Date>" +
                     "<Time>4:00pm</Time>" +
                     "<Change>-0.04</Change>" +
                     "<Open>46.59</Open>" +
                     "<High>46.78</High>" +
                     "<Low>46.26</Low>" +
                     "<Volume>29467107</Volume>" +
                     "<MktCap>377.14B</MktCap>" +
                     "<PreviousClose>46.66</PreviousClose>" +
                     "<PercentageChange>-0.09%</PercentageChange>" +
                     "<AnnRange>40.12 - 50.05</AnnRange>" +
                     "<Earns>2.41</Earns>" +
                     "<P-E>19.35</P-E>" +
                     "<Name>Microsoft Corporation</Name>" +
                   "</Stock>" +
                 "</StockQuotes>" +
                "</string>";
            XDocument doc = XDocument.Parse(input);
            var stocks = doc.Descendants("Stock").Select(x => new {
               symbol = x.Element("Symbol").Value,
               last = double.Parse(x.Element("Last").Value),
               date = DateTime.Parse(x.Element("Date").Value),
               time = DateTime.Parse(x.Element("Time").Value),
               change = double.Parse(x.Element("Change").Value),
               open = double.Parse(x.Element("Open").Value),
               high = double.Parse(x.Element("High").Value),
               low = double.Parse(x.Element("Low").Value),
               volume = long.Parse(x.Element("Volume").Value),
               mktcap = double.Parse(x.Element("MktCap").Value.Replace("B", "")),
               previousClose = double.Parse(x.Element("PreviousClose").Value),
               percentChange = double.Parse(x.Element("PercentageChange").Value.Replace("%", "")),
               annRange = x.Element("AnnRange").Value,
               earns = double.Parse(x.Element("Earns").Value),
               p_e = double.Parse(x.Element("P-E").Value),
               name = x.Element("Name").Value,
            }).ToList();

        }
    }
}
​