2010-08-16 120 views
1

在我正在开发的一个项目中,我刚完成为我的XML编写XSD,以便其他工程师可以更轻松地处理XML。随着这个XSD来了XML命名空间。在我目前的解析代码,我一直在使用这样的事情:在命名空间中解析XElements的优雅解决方案

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?如果是这样,那是什么?

回答

2

那么,没有人提供了替代方案,我已经在代码中实现了这一点。所以,我会继续,并将其作为答案,以便我可以将其解决。

我继续前进,并使用自动添加到名称空间中的扩展方法。请注意,这只适用于你有一个常量命名空间!否则,您可能需要为扩展方法添加另一个参数,以避免执行奇怪的命名空间连接。

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