[英]WP7 Linq to XML to get a child element of an XElement by name
我知道这是一个容易回答的问题,但是即使在SO和LINQ to XML教程上找到答案后,我也无法使其工作。 我正在使用Windows Phone 7,但我认为这不会有所作为。
我有看起来像这样的XML:
<response xmlns="http://anamespace.com/stuff/">
<error code="ERROR_CODE_1">You have a type 1 error</error>
</response>
我将上面的XML加载到XElement中。 我想获取“错误”节点。 这个问题说您需要处理名称空间。 我试过使用和不使用命名空间的查询,但两种方法都无法正常工作。
用名称空间查询:
private object ParseElement(XElement responseElement)
{
XNamespace ns = "http://anamespace.com/stuff/";
IEnumerable<XElement> errorNodes = from e in responseElement.Elements(ns + "error") select e;
}
不带名称空间的查询:
private object ParseElement(XElement responseElement)
{
IEnumerable<XElement> errorNodes = from e in responseElement.Elements("error") select e;
}
errorNodes变量永远不会填充XElements。 我读过的所有教程都使用这种表示法来按名称选择元素,但是它对我不起作用。
该代码可在我的机器 ™上使用:
XElement response = XElement.Parse(
@"<response xmlns=""http://anamespace.com/stuff/"">
<error code=""ERROR_CODE_1"">You have a type 1 error</error>
</response>");
XNamespace ns = "http://anamespace.com/stuff/";
XElement error = response.Element(ns + "error");
string code = (string)error.Attribute("code");
string message = (string)error;
Console.WriteLine(code);
Console.WriteLine(message);
我的机器虽然运行常规的.NET 4,所以也许您可以运行此代码并检查其是否适用于WP7。
您是否有机会阅读整个文档而不是error
内容?
如果您使用Descendants
而不是Elements
它是否有效?
[TestMethod]
public void CanGetErrorElements()
{
string xml = @"
<response xmlns=""http://anamespace.com/stuff"">
<error code=""ERROR_CODE_1"">You have a type 1 error</error>
</response>";
XDocument doc = XDocument.Parse(xml);
XNamespace ns = "http://anamespace.com/stuff";
var errorNodes = from e in doc.Descendants(ns + "error")
select e;
Assert.IsTrue(errorNodes.Count() > 0);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.