【问题标题】:Is there a way to set the default namespace to query from an XDocument?有没有办法将默认命名空间设置为从 XDocument 查询?
【发布时间】:2011-08-08 18:29:09
【问题描述】:

我不想在每个元素名称中都包含xmlns + "ElementName"

XDocument xml = XDocument.Load(@"C:\file.xml");
XNamespace xmlns = "http://www.com/namespace";
var vehicles = from vehicle in xml.Descendants(xmlns + "Element")
               select vehicle.Element(xmlns + "Item")
};

【问题讨论】:

  • 可以将xmlns 转换为string 吗?可以这样做xml = xml.Replace(xmlns.ToString(), "")吗?

标签: c# linq linq-to-xml


【解决方案1】:

不幸的是,这是您在使用 LINQ to XML 时必须做的事情。每次在文档中查询特定元素时,都必须提供命名空间。

【讨论】:

    【解决方案2】:

    看起来 Scott Hanselman 不久前写过一些笔记。可能不完全是您要查找的内容(帖子中有一些 Linq to XML 示例),但无论如何,这是链接:http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx

    另请参阅这个 SO 问题:How to set the default XML namespace for an XDocument

    【讨论】:

      【解决方案3】:

      即使为时已晚,但也许它可以帮助像我这样的其他人!

      您可以添加一个扩展方法来充当内置方法的包装器!

      像这样:

      public static class XDoncumentExtentions
      {
          private static string DefaultNamespace = "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}";
          public static IEnumerable<XElement> DescendantsSimple(this XContainer me, string simpleName)
          {
              return me.Descendants(string.Format("{0}{1}", DefaultNamespace, simpleName));
          }
      
          public static IEnumerable<XElement> ElementsSimple(this XContainer me, string simpleName)
          {
              return me.Elements(string.Format("{0}{1}", DefaultNamespace, simpleName));
          }
      
          public static XElement ElementSimple(this XContainer me, string simpleName)
          {
              return me.Element(string.Format("{0}{1}", DefaultNamespace, simpleName));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 2011-02-21
        • 2013-01-11
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多