2011-10-20 14 views
5

Bazı diğer sorular Xpath'in XML adlarını varsayılan ad alanıyla sorgulamak için nasıl kullanılacağını sordu. Cevap, varsayılan ad alanı için bir takma ad oluşturmak üzere bir ad alanı yöneticisi kullanmak ve bu takma adınızı xpath'larınızda kullanmaktır.Bir XML belgesindeki varsayılan ad alanı URI'sini bulun C#

Ancak, varsayılan ad alanının URI'sini önceden bilmiyorsanız ne olur? XML belgesinden nasıl buluyorsunuz?

+2

Theoratically çalışması gerekir, başka ad ilk etapta XML dosyası ayrıştırma işim yok bilmelidir. Pratik olarak ne demek istediğini biliyorum. XML'yi ayrıştırmak için hangi mekanizmayı kullanıyorsunuz? – Polity

+0

System.Xml.XmlDocument –

cevap

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

, kök elemanın namespaceURI denetleyerek varsayılan ad alabilirsiniz: Bu eski bir konu olduğunu biliyoruz

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

kullanıyorum Bu doğru değil inanıyorum. document.DocumentElement.NamespaceURI' sadece kök öğenin ad alanını döndürür. Bu, varsayılan ad alanı yerine bazı öneklere eklenen ad alanı olabilir. Örneğin. '' –

0

ama aynı problem vardı XmlDocument sınıfını kullanarak, varsayılan ad alanı ve önekli bir ad alanını bilmek istediğim gibi.

Her iki ad alanını da aynı Yöntemi kullanarak alabilirim.

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

bu beni XmlElement hem ad alanlarını almak için çalışıyor gibi görünüyor.

Düzenleme: Bu bir XmlNode Yöntem, bu yüzden de Öznitelikler'in