-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

try this, you need to cast it to expected type to get value

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

我确实编译了代码,一切似乎都很好。您刚刚错过的一件小事是 Xml 文档中的斜杠字符。最后一个字符串标签没有关闭,它会导致异常。

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

干杯

于 2012-10-29T20:27:34.963 回答