1

この特定のURL <-(クリックして表示)は正常に機能しています。

http://bankisrael.gov.il/currency.xml

しかし、通貨を抽出するためにそれから読み取ろうとすると、これは私がそれに取り組んでいる方法に関係なく私が得るものです...

<html><body><script>document.cookie='iiiiiii=e0076bcciiiiiii_e0076bcc; path=/';window.location.href=window.location.href;</script></body></html>

次のように試しました:

    using (WebClient c = new WebClient())
    {
        var result = c.DownloadString(@"http://bankisrael.gov.il/currency.xml");
    }

上記で試しましたWebClient...しかし、最初の試みとしてではありません。

この次のコードは私の最初の試みでした。私は何を間違っているのですか?

上記のURLに「サーフィン」している間、XMLはそこにあります。必死に別の方法を考える前に、まずあなたの助けを借りて試してみたいと思います。

ファイルをハードドライブに(プログラムで)保存してから、hddから読み取ることができます。そのアプローチについては、まだテストしていませんが、うまくいくと確信しています。

しかし、私はこれを試してみるために何人かの経験豊富な開発者に確認しようとしていました。何が間違っている可能性がありますか?

   string DollarURL = "http://bankisrael.gov.il/currency.xml";
   xx.Load(DollarURL);
   XmlNode root = xx;
4

2 に答える 2

2

これには、LinqtoXMLを使用する必要があるようです。試してみてくださいXDocument.Load

var xdoc = XDocument.Load(DollarURL);

xdoc.Rootあなたに要素を与えるでしょうCURRENCIES

Console.WriteLine(xdoc.Root.Name.LocalName); // "CURRENCIES"

xdoc.Root.Elements("CURRENCY")すべての通貨ノードを取得するために使用します。xdoc.Save("filename")ハードドライブに保存するために使用します。

特定の通貨を照会するには、次のように記述します。

XElement[] usdElements = xdoc.Root.Elements("CURRENCY")
    .Where(currency => (string)currency.Element("CURRENCYCODE") == "USD")
    .ToArray();

詳細については、MSDNのLINQtoXMLを参照してください。

于 2012-11-16T00:18:13.710 に答える
0

XPathを使用してXMLノードにアクセスする簡単な方法があります。

using System;
using System.Net;
using System.Xml;
using System.Globalization;

// ...    

using (WebClient c = new WebClient())
{
    string result = c.DownloadString(@"http://bankisrael.gov.il/currency.xml");
    CultureInfo culture = new CultureInfo("en-US");

    XmlDocument xml = new XmlDocument();
    xml.LoadXml(result);

    foreach (XmlNode currency in xml.SelectNodes("/CURRENCIES/CURRENCY"))
    {
        string name = currency.SelectSingleNode("NAME").InnerText;
        int unit = int.Parse(currency.SelectSingleNode("UNIT").InnerText);
        string currencyCode = currency.SelectSingleNode("CURRENCYCODE").InnerText;
        string country = currency.SelectSingleNode("COUNTRY").InnerText;
        double rate = double.Parse(currency.SelectSingleNode("RATE").InnerText, culture);
        double change = double.Parse(currency.SelectSingleNode("CHANGE").InnerText, culture);

        Console.WriteLine("{2} {0} ({3}, {5}) rate:{1} change:{4}", currencyCode, rate, unit, country, change, name);
    }
}
于 2012-11-16T00:45:09.930 に答える