【问题标题】:How to extract certain data from a XML document如何从 XML 文档中提取某些数据
【发布时间】:2012-10-31 00:03:33
【问题描述】:

好的,我会尽量快速简单地解释一下……

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

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

【问题讨论】:

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


    【解决方案1】:

    问题在于该服务实际上并没有提供 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 的部分是 &lt;string&gt; 元素,其余部分已被转义,&amp;lt;&amp;gt; 分别转换为 &amp;lt;&amp;gt;,这使得它只是一个一堆文字。

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

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

    【讨论】:

    • 我还是 xml 的新手,所以我对你告诉我要做什么有点困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多