gpt4 book ai didi

带/不带命名空间的 XML

转载 作者:行者123 更新时间:2023-12-04 16:56:33 28 4
gpt4 key购买 nike

以下 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>

最佳答案

这两个文档在语义上是相同的。在 XML 中,有两件事需要考虑:命名空间 URI(“http://...”部分)和别名(“ns2”部分)。

在查询您的 XML 文档时,在任一文档中,如果您尝试查找“sampledata”而不为节点分配 namespace ,您将找不到它。

在 .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;

在这个例子中, count1count2是 1。

关于带/不带命名空间的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8361272/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com