0

xignite API を使用して、リアルタイムの為替データを取得しています。クエリ文字列を使用する場合:

http://globalcurrencies.xignite.com/xGlobalCurrencies.xml/GetRealTimeRate?Symbol=GBPEUR&_token=[mytoken]

私は以下を取得します:

<Rate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.xignite.com/services/">
    <Outcome>Success</Outcome>
    <Identity>Request</Identity>
    <Delay>0.0218855</Delay>
    <BaseCurrency>USD</BaseCurrency>
    <QuoteCurrency>EUR</QuoteCurrency>
    <Symbol>USDEUR</Symbol>
    <Date>08/24/2016</Date>
    <Time>3:23:34 PM</Time>
    <QuoteType>Calculated</QuoteType>
    <Bid>0.889126</Bid>
    <Mid>0.88915</Mid>
    <Ask>0.889173</Ask>
    <Spread>4.74352E-05</Spread>
    <Text>
        1 United States dollar = 0.88915 European Union euro
    </Text>
    <Source>Rate calculated from EUR:USD</Source>
</Rate>

Mid要素の内容にアクセスしようとしていますが、これまでのところこれを行っています

var xDoc = XDocument.Load(
    "http://globalcurrencies.xignite.com/xGlobalCurrencies.xml/GetRealTimeRate?Symbol="
    + "GBP" + "EUR" + "&_token=[MyToken]");
string s = (string)xDoc.Root.Element("Mid");
output.Text = s;

xDoc変数は先ほど示した XML で返されますが、要素の内容を取得しようとするMidstring snull. MidXDoc を使用して要素のコンテンツにアクセスするにはどうすればよいですか?

4

2 に答える 2

0

私はLinq to XMLを使用しています。ここに例があります

XNamespace ns = "http://www.xignite.com/services/";
XDocument xdoc = XDocument.Load(xmlPath);
var rateMids = (from obj in xdoc.Descendants(ns + "Rate")
                 select new Rate
                 (
                      obj.Attribute("Outcome").Value,
                      obj.Attribute("Identity").Value,
                      (decimal)obj.Attribute("Delay").Value,
                      obj.Attribute("BaseCurrency").Value,
                      obj.Attribute("QuoteCurrency").Value,
                      obj.Attribute("Symbol").Value,
                      DateTime.Parse(obj.Attribute("Date").Value),
                      obj.Attribute("Time").Value.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture),
                      obj.Attribute("QuoteType").Value,
                      (decimal)obj.Attribute("Bid").Value,
                      (decimal)obj.Attribute("Mid").Value,
                      (decimal)obj.Attribute("Ask").Value,
                      Convert.ToInt32(obj.Attribute("Spread").Value),
                      Convert.ToInt32(obj.Attribute("Text").Value)
                 )
                ).ToArray();

myObjects には、XML ファイルからの MyObjects の配列が含まれます。

編集: 質問を XML で更新したため、クエリの名前空間 (クエリの ns) のみが欠落していると思います。Charles Mager の回答をご覧ください。

私の答えは別のアプローチです.Rateオブジェクトを保存し、XMLを再度読み取る必要なく使用します(クラスでRateを定義する必要があります)私が行った値の変換には注意してください。あなたのクラスに合わせてください:)

于 2016-08-24T17:42:13.643 に答える
0

XML の修飾名は、名前空間とローカル名の 2 つの部分で構成されます。XML では、ローカル名は ですMidが、名前空間は空ではありません。ルート要素http://www.xignite.com/services/のデフォルトの名前空間宣言で示されているように、それは です。xmlns="..."

これを考慮すると、次の結果が得られます。

XNamespace ns = "http://www.xignite.com/services/";
var mid = (decimal)xDoc.Root.Element(ns + "Mid");
于 2016-08-25T08:14:52.480 に答える