好的,我会尽快解释这个,尽可能简单......
我想要做的是从xml中提取四个不同的东西...首先关闭我正在使用的XML的here is the url,并从那个URL我试图仅显示名称(符号) ,最后,最高,最低。
因此,在我的应用程序中,当用户点击按钮获取股票报价时,现在出现的是该XML的所有内容,但我只希望显示上面列出的4件事。
这是我现在的代码......
HttpWebRequest myHttpWebRequest = null; //Declare an HTTP-specific implementation of the WebRequest class.
HttpWebResponse myHttpWebResponse = null; //Declare an HTTP-specific implementation of the WebResponse class
XmlTextReader myXMLReader = null; //Declare XMLReader
XPathNavigator nav;
XPathDocument docNav;
//Create Request
String stockQuote = "http://www.webservicex.net/stockquote.asmx/GetQuote?Symbol=T" + txtInfo.Text;
myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(stockQuote);
myHttpWebRequest.Method = "GET";
myHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";
//Get Response
myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
//Load response stream into XMLReader
myXMLReader = new XmlTextReader(myHttpWebResponse.GetResponseStream());
docNav = new XPathDocument(myXMLReader);
// Create a navigator to query with XPath.
nav = docNav.CreateNavigator();
txtResults.Text = txtResults.Text + nav.Name + " - " + nav.Value + Environment.NewLine;
答案 0 :(得分:2)
问题是服务实际上并没有提供xml提要,它只是围绕一些看起来像xml的编码数据的xml包装器。在使用xpath访问其中的任何元素之前,您必须预先处理它。如果你xmllint它可以看到这个
%xmllint --format 'http://www.webservicex.net/stockquote.asmx/GetQuote?Symbol=T'
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET/"><StockQuotes><Stock><Symbol>T</Symbol><Last>33.54</Last><Date>11/9/2012</Date><Time>4:00pm</Time><Change>+0.34</Change><Open>33.02</Open><High>33.72</High><Low>32.71</Low><Volume>31871880</Volume><MktCap>190.5B</MktCap><PreviousClose>33.20</PreviousClose><PercentageChange>+1.02%</PercentageChange><AnnRange>27.41 - 38.58</AnnRange><Earns>0.756</Earns><P-E>43.92</P-E><Name>AT&T Inc.</Name></Stock></StockQuotes></string>
我不是.net程序员,所以我无法给你一个说明性的答案,但从我正在阅读的内容XmlTextReader
看起来它似乎是为了阅读已经是XML的数据。但是,该响应的唯一部分是XML <string>
元素,其余部分已被转义,<
和>
已转换为<
和{{分别为1}},它只是一堆文字。
在这一点上,凭借我15分钟的.net经验,在我看来你需要将它们转换回来(不确定最佳做法是什么),然后可能使用像{{3在你真正使用>
之前。请适当地调整您采用此建议的盐粒。
或者您可以尝试让任何提供该服务的人实际发出真正的xml。