0

好的,我会尽量快速和简单地解释这一点......

我想要做的是从 xml 中提取四种不同的东西......首先我正在使用的 XML 的 url,我试图从那个 url XML 中只显示名称(符号)、Last、High和低。

因此,在我的应用程序中,当用户点击按钮获取股票报价时,现在出现的是来自该 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;
4

1 回答 1

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/">&lt;StockQuotes&gt;&lt;Stock&gt;&lt;Symbol&gt;T&lt;/Symbol&gt;&lt;Last&gt;33.54&lt;/Last&gt;&lt;Date&gt;11/9/2012&lt;/Date&gt;&lt;Time&gt;4:00pm&lt;/Time&gt;&lt;Change&gt;+0.34&lt;/Change&gt;&lt;Open&gt;33.02&lt;/Open&gt;&lt;High&gt;33.72&lt;/High&gt;&lt;Low&gt;32.71&lt;/Low&gt;&lt;Volume&gt;31871880&lt;/Volume&gt;&lt;MktCap&gt;190.5B&lt;/MktCap&gt;&lt;PreviousClose&gt;33.20&lt;/PreviousClose&gt;&lt;PercentageChange&gt;+1.02%&lt;/PercentageChange&gt;&lt;AnnRange&gt;27.41 - 38.58&lt;/AnnRange&gt;&lt;Earns&gt;0.756&lt;/Earns&gt;&lt;P-E&gt;43.92&lt;/P-E&gt;&lt;Name&gt;AT&amp;T Inc.&lt;/Name&gt;&lt;/Stock&gt;&lt;/StockQuotes&gt;</string>

我不是.net 程序员,所以我无法给你一个说明性的答案,但从我所读到的内容XmlTextReader来看,它似乎是为了读取已经是 XML 的数据。但是,该响应中唯一作为 XML 的部分是<string>元素,其余部分已被转义,<并分别>转换为&lt;&gt;,这使其只是一堆文本。

在这一点上,我有 15 分钟的 .net 经验,在我看来,您需要将它们转换回来(不确定最佳实践是什么),然后可能会使用类似LoadXML之前的东西,然后才能实际XmlTextReader使用它。请适当调整您接受此建议的盐粒。

或者您可以尝试让提供该服务的人实际发出真正的 xml。

于 2012-11-11T06:47:11.083 回答