XML 元素和命名空间 [英] XML Element and Namespace

查看:36
本文介绍了XML 元素和命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下方法来解析 XMLElements:

I have the following method to parse XMLElements:

DisplayMessages(XElement root)
{
  var items = root.Descendants("Item");
  foreach (var item in items)
  {
     var name = item.Element("Name");
     ....
  }
}

在调试模式下,我可以看到像这样的 XML 根:

In debug mode, I can see the root as XML like this:

<ItemInfoList>
  <ItemInfo>
    <Item>
      <a:Name>item 1</a:Name>
      ...
    <Item>
    ...

并且 var 名称为空(我希望得到项目 1").我尝试使用a:Name"但它导致异常(字符:不能在名称中使用").我不确定是否必须在根 XElelement 中设置命名空间.root下的所有xml节点都应该在同一个namespace中.

and var name is null (I expect to get "item 1"). I tried to use "a:Name" but it caused exception("character : cannot be used in name"). I am not sure if I have to set namespace in root XElelement or not. All the xml node under root should be in the same namespace.

我是 XElement 的新手.在我的代码中,item.Element("Name") 会得到它的子节点 "Name" 的值,对吗?

I am new to XElement. In my codes, item.Element("Name") will get its children node "Name"'s value value, is that right?

推荐答案

您需要使用包含命名空间的元素名称.试试这个:

You need to use element names that include namespace. Try this:

static void DisplayMessages(XElement root)
{
    var items = root.Descendants(root.GetDefaultNamespace() + "Item");
    foreach (var item in items)
    {
        var name = item.Element(item.GetNamespaceOfPrefix("a") + "Name");
        Console.WriteLine(name.Value);
    }
}

请注意,为了使代码更短,XNamespace 类重载了 operator +:XNamespace.Addition 运算符.

Note that operator + is overloaded for XNamespace class in order to make code shorter: XNamespace.Addition Operator.

这篇关于XML 元素和命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆