Is there a way to set the default namespace to query from an XDocument?

只愿长相守 提交于 2019-12-24 00:45:35

问题


I don't want to include xmlns + "ElementName" for every element name?

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")
};

回答1:


Unfortunately this is what you must do when working with LINQ to XML. You must provide the namespace each time you query the document for a particular element.




回答2:


Looks like Scott Hanselman has written some notes on it a while ago. Not exactly what you are lookin for, maybe (there are some Linq to XML examples a bit down in the post), but here's the link, anyhow: http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx

See also this SO question: How to set the default XML namespace for an XDocument




回答3:


Even it is too late but maybe it helps someone else like me!

You can add an extention method to act as a wrapper for the built in one!

Like so:

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));
    }
}


来源:https://stackoverflow.com/questions/6986785/is-there-a-way-to-set-the-default-namespace-to-query-from-an-xdocument

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!