好的另一个WPF问题,我想这只是一般的.NET。我有一个从URL恢复的xml文档。
我希望从文档中获取多个值(天气数据,位置,其他一些字符串)。
当我使用XmlTextReader时,我可以调用我的方法来拉出值。我第一次传递方法来搜索xml节点并获取值(XMLTextReader对象)时,我得到了正确的数据,但是XMLTextReader已经死了。不知道为什么它被淘汰了。所以我必须在FindTags ...方法中执行下面的UGLY代码。我想继续将xtr(XMLTextreader)传递回我的find方法。这是读者的本性吗?我不想每次都要点击URL ...这似乎也是错误的。
帮助..这一切都感觉不对。
感谢。
GetWeatherFeed("97229", "//weather//loc//dnam", "//weather//cc//tmp", "/weather/cc/icon");
获取WeatherFeed方法(剪断)
System.Xml.XmlTextReader xtr = new System.Xml.XmlTextReader(Url that retuns xm);
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht = FindTagsUsingXPthNaviatorAndXPathDocumentNew(xtr, location, temperature, iconid);
lblLocation.Content = ht["Location"].ToString();
lblWeatherCondition.Content = ht["Weather"].ToString();
public System.Collections.Hashtable FindTagsUsingXPthNaviatorAndXPathDocumentNew(System.Xml.XmlTextReader xtr, string nodeToLocate1, string nodeToLocate2, string nodeToLocate3)
{
System.Xml.XPath.XPathDocument xpDoc = new System.Xml.XPath.XPathDocument(xtr);
System.Xml.XPath.XPathNavigator xpNav = xpDoc.CreateNavigator();
System.Xml.XPath.XPathExpression xpExpression = xpNav.Compile(nodeToLocate1);
System.Xml.XPath.XPathNodeIterator xpIter = xpNav.Select(xpExpression);
System.Collections.Hashtable ht = new System.Collections.Hashtable();
while (xpIter.MoveNext())
{
ht.Add("Location", xpIter.Current.Value);
}
xpExpression = xpNav.Compile(nodeToLocate2);
xpIter = xpNav.Select(xpExpression);
while (xpIter.MoveNext())
{
ht.Add("Weather", xpIter.Current.Value);
}
xpExpression = xpNav.Compile(nodeToLocate3);
xpIter = xpNav.Select(xpExpression);
while (xpIter.MoveNext())
{
ht.Add("Icon", xpIter.Current.Value);
}
return ht;
}
答案 0 :(得分:1)
这就是我做的......很棒的答案。
System.Xml.XmlTextReader xtr = new System.Xml.XmlTextReader(my xml url);
System.Xml.XPath.XPathDocument xdoc = new System.Xml.XPath.XPathDocument(xtr);
lblLocation.Content = getXmlNodeValue(xdoc, location);
lblWeatherCondition.Content = getXmlNodeValue(xdoc, temperature);
答案 1 :(得分:0)
XMLTextReader不是SAX读卡器吗?你不必回放流来再次读取文件吗?
答案 2 :(得分:0)
XmlTextReader无法重置为开头。 首先下载内容,然后使用多个XmlTextReaders(如果必须)。
如果您下载的文档很小,我只会使用XmlDocument(如果您使用的是.NET 3.5,则使用XDocument)