Эти два документа семантически идентичны.В XML есть две вещи, о которых следует подумать: URI пространства имен (часть «http: // ...») и псевдоним (часть «ns2».)
При запросе документа XML,в любом документе, если вы попытаетесь найти «sampleledata» без назначения пространства имен узлу, вы не найдете его.
В классах .NET System.Xml.XmlNode вам необходимо настроить свое пространство именпсевдонимы, прежде чем вы можете запросить что-нибудь.Технически, при запросе DOM нет причины, по которой вы не могли бы создать псевдоним "foo" и присвоить ему URI "http://www.mycompany.com".. При такой настройке запрос" foo: sampledata "вернет узел в любом документе.
XmlDocument doc1 = new XmlDocument();
doc1.LoadXml(@"
<sampledata xmlns=""http://www.mycompany.com"">
<firstname>James</firstname>
<lastName>Dean</lastName>
<age>19</age>
</sampledata>");
XmlDocument doc2 = new XmlDocument();
doc2.LoadXml(@"
<ns2:sampledata xmlns:ns2=""http://www.mycompany.com"">
<ns2:firstname>James</ns2:firstname>
<ns2:lastName>Dean</ns2:lastName>
<ns2:age>19</ns2:age>
</ns2:sampledata>");
XmlNamespaceManager nsMgr = new XmlNamespaceManager(new NameTable());
nsMgr.AddNamespace("foo", "http://www.mycompany.com");
int count1 = doc1.SelectNodes("foo:sampledata", nsMgr).Count;
int count2 = doc2.SelectNodes("foo:sampledata", nsMgr).Count;
В этом примере значения count1
и count2
равны 1.