WPF - 使用XMLTextReader在XML文档中搜索值

时间:2008-12-09 05:08:20

标签: wpf xml xmltextreader xpathdocument

好的另一个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;
}

3 个答案:

答案 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)