-1

私はこのようなwcfサービスを呼び出します:

XDocument xdoc = null;
xdoc = XDocument.Load("http:\\www.mydomain.com\service\helloservice");

WCFから次のようなxmlスニペットを受け取ります。

<ArrayOfstring><string>hello</string><string>world</string><string>!</string></ArrayOfstring>

要素内のコンテンツを取得しようとしています

私のコードはこのようなものですが、何も返されません:

  var i = (from n in xdoc.Descendants("string")
                 select new { text =  n.Value});

xdoc.DescendantNodes()を実行すると、次のようになります。

[0] "<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <string>HELLO</string>
</ArrayOfstring>"

[1] "<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">HELLO</string>"

[2] "Hello"

私はこれにかなり慣れていません。なぜlinqが結果を返さないのか理解できません...どのXdocument機能を使用する必要がありますか?いくつかのポインタをいただければ幸いです。ありがとう。

4

3 に答える 3

1

アップデート

using System;
using System.Linq;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Porgram
    {
        static void Main(string[] args)
        {
            string xml = "<ArrayOfstring  xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><string>hello</string><string>world</string><string>!</string></ArrayOfstring>";
            XDocument doc = XDocument.Parse(xml);

            XNamespace ns = "http://schemas.microsoft.com/2003/10/Serialization/Arrays";

            var text = from str in doc.Root.Elements(ns + "string")
                    select str.Value;
            foreach (string str in text)
            {
                Console.WriteLine(str);
            }
            Console.ReadKey();
        }
    }
}
于 2012-10-29T20:33:24.807 に答える
0

コードをコンパイルしましたが、すべて問題ないようです。見逃したのは、Xmlドキュメントのスラッシュ文字です。最後の文字列タグは閉じられておらず、例外が発生します。

<ArrayOfstring><string>hello</string><string>world</string><string>!</string></ArrayOfstring>

乾杯

于 2012-10-29T20:27:34.963 に答える
0

これを試してください。値を取得するには、期待されるタイプにキャストする必要があります

       var i = from n in xdoc.Descendants("ArrayOfstring")
                select new { text = (string)n.Element("string")};
于 2012-10-29T20:40:58.323 に答える