2011-10-20 11 views
5

Xpathを使用してデフォルトの名前空間を持つXML文書を照会する方法が他にもいくつか質問されています。その答えは、名前空間マネージャを使ってデフォルト名前空間のエイリアスを作成し、そのエイリアスをxpathで使用することです。C#のXML文書からデフォルトの名前空間URIを調べる

ただし、デフォルトの名前空間のURIがわからない場合はどうすればよいですか?あなたはそれをXML文書からどのように見つけますか?

+2

Theoraticallyで動作するはずです、あなたが最初の場所でのXMLファイルを解析する一切の事業を持っていない他の名前空間を知っている必要があります。実際に私はあなたが何を意味するか知っています。どのようなメカニズムを使ってXMLを解析しますか? – Polity

+0

私はSystem.Xml.XmlDocumentを使用しています –

答えて

11
var doc = XDocument.Parse(myXml); 
XNamespace ns = doc.Root.GetDefaultNamespace(); 
3

あなたがXmlDocumentオブジェクトを使用している場合は、ルート要素のNamespaceURIををチェックすることで、デフォルトの名前空間を取得することができます。

var document = new XmlDocument(); 
document.LoadXml("<root xmlns='http://java.sun.com/xml/ns/j2ee'></root>"); 
var defaultNamespace = document.DocumentElement.NamespaceURI; 
Assert.IsTrue(defaultNamespace == "http://java.sun.com/xml/ns/j2ee"); 
+0

これは正しくないと思います。 'document.DocumentElement.NamespaceURI'は、ルート要素の名前空間を返します。これは、デフォルトの名前空間の代わりにいくつかの接頭辞に付けられた名前空間である可能性があります。例えば。 '' –

0

私はこれが古いトピックです知っているが、私は同じ問題を抱えていました私はDefault Namespaceと接頭辞付きの名前空間を知りたいので、XmlDocumentクラスを使用していました。

同じメソッドを使用して両方の名前空間を取得できました。

string prefixns = element.GetNamespaceOfPrefix("prefix"); 
string defaultns = element.GetNamespaceOfPrefix(""); 

これは、両方の名前空間をXmlElementで取得するために機能するようです。

編集:これはXmlNodeのメソッドなので、また属性

関連する問題