Как извлечь определенные данные из документа XML

Хорошо, я постараюсь объяснить это быстро и так просто, как я могу...

То, что я пытаюсь сделать, это извлечь четыре разные вещи из XML... во-первых, это URL -адрес XML, который я использую, и из этого 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;

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, является <string> элемент, остальная часть этого избежала, < а также > конвертировано в &lt; а также &gt; соответственно, что делает его просто кучей текста.

С моими 15-минутными опытами работы с сетью.net мне кажется, что вам нужно преобразовать их обратно (не знаю, какой будет лучший метод для этого), а затем, возможно, использовать что-то вроде LoadXML прежде чем вы могли бы на самом деле использовать XmlTextReader в теме. Пожалуйста, масштабируйте зерно соли, с которым вы берете этот совет.

Или вы можете попытаться заставить любого, кто предоставляет эту услугу, действительно испускать настоящий XML.

Другие вопросы по тегам