0

わかりました別の WPF の質問です。まあ、これは一般的な .NET だと思います。URL から取得した xml ドキュメントがあります。

ドキュメントから複数の値を取得したい (天気データ、場所、その他の文字列)。

XmlTextReader を使用すると、メソッドを呼び出して値を取得できます。初めてメソッドを渡して xml ノードを検索し、値 (XMLTextReader オブジェクト) を取得すると、正しいデータが返されますが、その後 XMLTextReader が機能しなくなります。なぜそれが無効になるのかわかりません。そのため、FindTags... メソッドで以下の醜いコードを実行する必要があります。xtr (XMLTextreader) を find メソッドに渡し続けたいだけです。これが読者の性なのだろうか。毎回 URL にアクセスする必要もありません... それも間違っているようです。

助けて..これはすべて間違っているように感じます。

ありがとう。

        GetWeatherFeed("97229", "//weather//loc//dnam", "//weather//cc//tmp", "/weather/cc/icon");

Get 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 を最初にリセットすることはできません。最初にコンテンツをダウンロードしてから、複数の XmlTextReaders を使用します (必要な場合)。

ダウンロードするドキュメントが小さい場合は、XmlDocument (または .NET 3.5 を使用している場合は XDocument) を使用します。

于 2008-12-09T05:16:10.050 に答える