2011-08-08 18 views
2

すべての要素名にxmlns + "ElementName"を含めたくないのですか?XDocumentから照会するデフォルトの名前空間を設定する方法はありますか?

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

が '' STRING'に変換するxmlns'ができ、これが '' XML = xml.Replace(xmlns.ToString()、 "")に行われるだろうか? – Bastardo

答えて

3

残念ながら、これはLINQ to XMLで作業するときに行う必要があります。特定の要素のドキュメントを照会するたびに、名前空間を指定する必要があります。

0

Scott Hanselmanのように見えますが、もう少し前にノートを書いています。ない正確に何を見ているのされている、多分(ビットダウンポストでのXMLの例をいくつかのLINQがある)が、ここではとにかく、リンクです:http://www.hanselman.com/blog/GetNamespacesFromAnXMLDocumentWithXPathDocumentAndLINQToXML.aspx

も参照してください。このSOの質問:でもそれHow to set the default XML namespace for an XDocument

0

あまりにも遅いですが、多分私のような誰かを助ける!

拡張メソッドを追加して、組み込み関数のラッパーとして機能させることができます。

ので、同じように:

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)); 
    } 
} 
関連する問題