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

发布于 2024-10-07 06:23:34 字数 1037 浏览 1 评论 0原文

我知道这是一个有点简单的问题,但即使在查看了 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 变量永远不会被 XElement 填充。我读过的教程都使用这种表示法按名称选择元素,但它对我不起作用。

I know this is a somewhat easy question, but I haven't been able to make it work even after looking at answers on SO and LINQ to XML tutorials. I'm using Windows Phone 7, but I don't think that should make a difference.

I have XML that looks like this:

<response xmlns="http://anamespace.com/stuff/">
    <error code="ERROR_CODE_1">You have a type 1 error</error>
</response>

I have the XML above loaded into an XElement. I want to get the "error" node. This question says you need to handle the namespace. I've tried my query with and without the namespace and it doesn't work either way.

Query with namespace:

private object ParseElement(XElement responseElement)
{
    XNamespace ns = "http://anamespace.com/stuff/";
    IEnumerable<XElement> errorNodes = from e in responseElement.Elements(ns + "error") select e;
}

Query without namespace:

private object ParseElement(XElement responseElement)
{
    IEnumerable<XElement> errorNodes = from e in responseElement.Elements("error") select e;
}

The errorNodes variable never gets populated with XElements. The tutorials I've read all use this notation for selecting an element by name, but it's not working for me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很酷又爱笑 2024-10-14 06:23:34

此代码在我的机器上运行™:

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。

This codes Works on my Machine™:

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);

My machine runs regular .NET 4 though, so maybe you can run this code and check if it works for WP7.

梦一生花开无言 2024-10-14 06:23:34

您有可能正在阅读整个文档而不是 error 元素吗?

如果您使用后代而不是元素,它可以工作吗?

[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);
}

Any chance you're reading the whole document instead of the error elements?

Does it work if you use Descendants instead of 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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文