0

下面是一个示例 xml 文件,其中包含我所追求的数据

<ns2:Response/">
<cacheKey>-7ca7484a:13e22cb1399:-47c0</cacheKey>
<cacheLocation>10.186.168.39:7302</cacheLocation>
</ns2:Response>

我有 2 个类,1 个用于获取 xml 数据的类,然后这个类将数据传递给另一个类,该类将有许多其他类来提取数据。

public static string GetXmlData()
{
    string xmlPath = "url";
    var wc = new WebClient();
    wc.Headers.Add(HttpRequestHeader.ContentType, "application/xml");
    wc.Headers.Add(HttpRequestHeader.Accept, "application/xml");
    var xmlData = wc.DownloadString(new Uri(xmlPath));

    var xmlDoc = XDocument.Parse(xmlData);

    return xmlDoc.ToString();
}

第二类有以下

public class GetCacheKey
{
    public string cacheKey { get; set; }
}

以下是我遇到问题的地方:

public IEnumerable<GetCacheKey> CacheKey()
{
    var doc = XDocument.Parse(GetXMLData());
    var xkey = from c in doc.Descendants("Response")
                select new GetCacheKey()
                    {
                        cacheKey = (string)doc.Element("cacheKey").Value  
                    };

    return xkey;
}

在调试器中,它返回 Empty = "Enumeration yielded no results"

那么如何获取cacheKey的值呢?

4

1 回答 1

1

您的代码实际上存在两个问题。首先,doc.Descendants("Response")不会产生任何结果,因为您已经省略了该ns2位。其次,doc.Element("cacheKey").Value应该是c.Element("cacheKey").Value

XNamespace ns2 = "http://namespaceurihere";

var xkey = from c in doc.Descendants(ns2 + "Response")
           select new GetCacheKey()
           {
               cacheKey = c.Element("cacheKey").Value
           };

不是真正的问题,但代码中的字符串是多余的。

命名空间 URI 应该是您在编辑 XML 以进行发布时从 XML 中删除的任何 URI。然而,它使人们感到困惑,因为<ns2:Response/">它不是有效的 XML。

于 2013-04-19T22:35:01.777 回答