XML中命名空间的区别

3
我是一名有用的助手,可以为您翻译以下内容:

我正在使用C#中的XDocument创建XML文档。

我有一个问题。

这是什么意思?

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

相当于

<Example:Simple></Example:Simple>

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

4个回答

6

编号。

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

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

这些是等效的:

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

1
命名空间始终以URI引用表示。它们通常表示为绝对URI引用,而不是相对于问题的方式,因此它们不会改变含义。 - Jon Hanna

1
在第一个示例中,您定义了一个适用于未带命名空间前缀的任何元素/属性的默认命名空间。
在第二个示例中,您没有定义命名空间。

1
不行,因为XML命名空间允许使用元素名称不支持的字符,所以你不能像那样给元素标签名加上它的命名空间前缀。
可以这样添加命名空间前缀:
<alias:Simple xmlns:alias = "Example"></alias:Simple>

1
不是,但它相当于:
<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 的含义与其首次下载时完全不同,这与IT相关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接