以下XML文档在技术上是否相同?
<sampledata xmlns="http://www.mycompany.com">
<firstname>James</firstname>
<lastName>Dean</lastName>
<age>19</age>
</sampledata>
和
<ns2:sampledata xmlns:ns2="http://www.mycompany.com">
<ns2:firstname>James</firstname>
<ns2:lastName>Dean</lastName>
<ns2:age>19</age>
</ns2:sampledata>
答案 0 :(得分:1)
这两个文件在语义上是相同的。在XML中,有两件事需要考虑:名称空间URI(“http:// ...”部分)和别名(“ns2”部分。)
在任一文档中查询XML文档时,如果您尝试查找“sampledata”而未向节点分配命名空间,则无法找到它。
在.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。
答案 1 :(得分:0)
不,他们在技术上不是。
ns2
前缀。这可以通过确保两个文档中都包含xmlns:ns2="http://www.mycompany.com"
和xmlns="http://www.mycompany.com"
来解决,尽管每个文档中只会使用一个。
但是,在查询这些XML方面,是的,它们是相同的
嗯,不完全是。
将找到节点,但输出格式将不同(至少使用.NET xml thingies)。例如,如果您查询这两个文档"http://www.mycompany.com":firstname
,您将获得
<firstname xmlns="http://www.mycompany.com">James</firstname>
和
<ns2:firstname xmlns:ns2="http://www.mycompany.com">James</ns2:firstname>
分别
但如果您确保两个文档都知道xmlns
和xmlns:ns2
,那么输出格式将是相同的:
<firstname xmlns="http://www.mycompany.com">James</firstname>
<firstname xmlns="http://www.mycompany.com">James</firstname>