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

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

То, что я пытаюсь сделать, это извлечь четыре разных вещи из xml... во-первых вот URL-адрес XML, который я использую, и из этого URL-адреса XML я пытаюсь отобразить только имя (символ), Last, High и Low.

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

person Matt McCarthy    schedule 11.11.2012    source источник


Ответы (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.

person nine9ths    schedule 11.11.2012
comment
Я все еще новичок в xml, поэтому я немного смущен тем, что вы говорите мне делать - person Matt McCarthy; 11.11.2012