下面是一个示例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 yielding without results”
那么如何获取cacheKey的值?
答案 0 :(得分: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中删除的URI。然而,它让人感到困惑,因为<ns2:Response/">
不是有效的XML。