0

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

3 回答 3

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);
于 2008-12-09T06:21:51.213 回答
0

XMLTextReader 不是 SAX 阅读器吗?您不必倒带流以再次读取文件吗?

于 2008-12-09T05:10:12.387 回答
0

XmlTextReader 无法重置为开头。首先下载您的内容,然后使用多个 XmlTextReader(如果必须)。

如果您下载的文档很小,我会使用 XmlDocument(如果您使用的是 .NET 3.5,则使用 XDocument)

于 2008-12-09T05:16:10.050 回答