如何从字符串中获取xml节点值

时间:2014-08-31 10:02:13

标签: c# xml

我正在尝试从以下 XML 节点获取 XML 值:

<StockQuotes>
  <Stock>
    <Symbol>LLOY.L</Symbol>
    <Last>76.27</Last>
    <Date>8/29/2014</Date>
  </Stock>
</StockQuotes>

这是我的代码:

XmlDocument quoteXML = new XmlDocument();

string strData = myXMLfile;
quoteXML.LoadXml(strData);
XmlNode nodes = quoteXML.SelectSingleNode("StockQuotes/Stock/Last/Date");
string strPrice = nodes["Last"].InnerText;
string strDate = nodes["Date"].InnerText;

Response.Write( strPrice + strDate );

我收到错误:

Object reference not set to an instance of an object. 

当我将整个字符串strData写入视图时,我得到了所有的 XML ,所以我知道该文件是有效的。

2 个答案:

答案 0 :(得分:0)

问题来源:

quoteXML.SelectSingleNode("StockQuotes/Stock/Last/Date"); SelectSingleNode来电将返回<Date>8/29/2014</Date>

的代表

但您尝试access subnodes ["Last"]["Date"],它们不是<Date>8/29/2014</Date>的子节点,并考虑到索引器返回:

  

与指定名称匹配的第一个XmlElement。它返回一个   null引用(在Visual Basic中为Nothing),如果没有匹配项。

nodes["Last"]nodes["Base"]将同时为null,从而导致.InnerText XmlNode nodes = quoteXML.SelectSingleNode("StockQuotes/Stock"); 属性访问。

<强> SOLUTION:

使用

Stock

代替访问{{1}}节点。

答案 1 :(得分:0)

问题在于XML Feed中的特殊字符。我已经解决了这个问题并使用了:

'string strData = WebService.GetDate(); // returns xml as string
            string decoded = WebUtility.HtmlDecode(strData); quoteXML.LoadXml(decoded); 

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(decoded);
            XmlNodeList xnList = xml.SelectNodes("/StockQuotes/Stock");
            foreach (XmlNode xn in xnList)
            {
                strQuote = xn["Last"].InnerText;
            }'