如何从XML文档中提取某些数据

时间:2012-11-11 05:42:44

标签: asp.net xml web-services xpath xpathdocument

好的,我会尽快解释这个,尽可能简单......

我想要做的是从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;

1 个答案:

答案 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/">&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;和{{分别为1}},它只是一堆文字。

在这一点上,凭借我15分钟的.net经验,在我看来你需要将它们转换回来(不确定最佳做法是什么),然后可能使用像{{3在你真正使用&gt;之前。请适当地调整您采用此建议的盐粒。

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