代码之家  ›  专栏  ›  技术社区  ›  fire.eagle

解析命名空间中Xelement的优雅解决方案

  •  1
  • fire.eagle  · 技术社区  · 15 年前

    在我正在进行的一个项目中,我刚刚为我的XML编写了一个XSD,这样其他工程师就可以更容易地处理XML。伴随着XSD的还有XML名称空间。在我当前的分析代码中,我一直在使用类似于以下内容的代码:

    XElement element = xmlRoot.Element(XML.ELEMENT_NAME);
    

    XML是一个包含常量的类,在整个程序中用于XML输入和输出。但是,既然名称空间被使用了,这就不再有效了。显而易见,但几乎不优雅的解决方案是让所有的解析代码看起来像这样:

    XElement element = xmlRoot.Element(XML.NAMESPACE + XML.ELEMENT_NAME);
    

    再仔细考虑一下,最好先定义一个扩展方法来添加这个名称空间并返回Xelement。这个想法会使代码看起来像这样:

    XElement element = xmlRoot.GetMyElement(XML.ELEMENT_NAME);
    

    这些想法是我迄今为止为处理名称空间问题所提出的。 基本上,我的问题是:
    有没有更好的方法来解析具有已知的常量命名空间的Xelement?如果是,那是什么?

    1 回复  |  直到 15 年前
        1
  •  2
  •   fire.eagle    15 年前

    好吧,没有人提供替代方案,我已经在代码中实现了这一点。所以,我要继续,把这个作为答案放进去,这样我就可以结束这个。

    我接着使用了自动添加到名称空间中的扩展方法。请注意,只有当您有一个恒定的名称空间时,这才有效!否则,您可能希望向扩展方法添加另一个参数,以避免执行奇怪的名称空间连接。

          public static XElement
          GetNamespaceElement(this XElement element, string ns, string name)
          {
              XNamespace n = new XNamespace();
              n.NamespaceName = ns;
              return element.Element(n + name);
          }