【问题标题】:Elegant Solution to Parsing XElements in a Namespace在命名空间中解析 XElement 的优雅解决方案
【发布时间】:2010-08-20 02:21:56
【问题描述】:

在我正在进行的一个项目中,我刚刚为我的 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);

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

【问题讨论】:

    标签: c# xml-namespaces xelement


    【解决方案1】:

    好吧,没有人提供替代方案,我已经在代码中实现了这一点。所以,我将继续把它作为答案输入,这样我就可以关闭它了。

    我继续使用自动添加到命名空间中的扩展方法。请注意,这仅在您有一个常量命名空间时才有效!否则,您可能只想在扩展方法中添加另一个参数,以避免进行奇怪的命名空间连接。

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

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 2011-07-29
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多