XML中命名空间的区别

时间:2012-08-16 12:48:41

标签: c# xml linq-to-xml xelement

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

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

相当于

<Example:Simple></Example:Simple>

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

4 个答案:

答案 0 :(得分:6)

没有。

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

第二个示例在与示例前缀关联的任何名称空间中创建 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 :(得分:1)

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

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

答案 2 :(得分:1)

不,因为xml名称空间允许元素名称不支持的字符,所以不能为元素标记名称添加其名称空间的前缀。

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

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

答案 3 :(得分:1)

不,但它相当于:

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

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

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

OR

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

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

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

这意味着Simple的含义与首次下载时的含义完全不同。