繁体   English   中英

WP7 Linq to XML通过名称获取XElement的子元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM