XML中命名空间之间的区别

Posted

技术标签:

【中文标题】XML中命名空间之间的区别【英文标题】:Difference between namespace in XML 【发布时间】:2012-08-12 19:43:47 【问题描述】:

我正在使用 C# 中的 XDocument 创建 XML 文档。 我有一个问题。

<Simple xmlns = "Example"></Simple>

相当于

<Example:Simple></Example:Simple>

?

我尝试在 C# 中使用 XNamespace 和 XElement 获得第二个解决方案,但我只获得了第一个。

【问题讨论】:

【参考方案1】:

没有。

第一个示例在 Example 命名空间中创建了一个 Simple 元素(注意命名空间通常表示为 URI)

第二个示例在与 Example 前缀(由 xmlns 属性定义)关联的任何命名空间中创建一个 Simple 元素。

这些是等价的:

<xml xmlns="http://example.com/myNameSpace">
    <Simple></Simple>
</xml>

<xml xmlns="http://example.com/myNameSpace" xmlns:Example="http://example.com/myNameSpace">
    <Example:Simple></Example:Simple>
</xml>

【讨论】:

命名空间总是表示为 URI 引用。它们通常表示为绝对 URI 引用而不是问题中的相对引用,因此它们不会改变含义。【参考方案2】:

在第一个示例中,您定义了一个 default 命名空间,该命名空间适用于任何不以自己的命名空间为前缀的元素/属性。

在第二个示例中,您没有定义命名空间。

【讨论】:

【参考方案3】:

不,因为 xml 命名空间允许元素名称不支持的字符,所以您不能在元素标记名称前加上它的命名空间。

添加命名空间前缀,如下所示:

<alias:Simple xmlns:alias = "Example"></alias:Simple>

【讨论】:

【参考方案4】:

不,但它相当于:

<Example:Simple xmlns:Example="Example"></Example:Simple>

使用相对 URI 作为命名空间名称是个坏主意,因为这个 XML 现在有一个不同的命名空间,具体取决于它的来源。所以总是给出完整的 URI。例如,如果 XML 是从 http://example.net/somePlace/someXML 接收的,则相对 URI Example 会扩展为 http://example.net/somePlace/Example,因此请充分使用它:

<Example:Simple xmlns:Example="http://example.net/somePlace/Example"></Example:Simple>

<Simple xmlns="http://example.net/somePlace/Example"></Simple>

否则,如果有人将其保存在 C:\Documents 中,然后再次打开它就相当于:

<Simple xmlns="file:///C|/Documents/Example"></Simple>

也就是说这里Simple的意思和刚下载的时候完全不一样了。

【讨论】:

以上是关于XML中命名空间之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

F# 中模块和命名空间之间的区别

类、包、命名空间和模块之间有啥区别?

“使用 MyNameSpace;”之间的区别和“命名空间 MyNameSpace”

xml的命名空间

声明 Javascript 命名空间的两种方式之间的区别

命名空间,类,对象和实例之间有什么区别?