我正在尝试从以下 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 ,所以我知道该文件是有效的。
答案 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;
}'