转自:http://www.360doc.com/content/12/0625/18/10042054_220381194.shtml
在研究spring security的时候,里面提到了一个重要的感念就是命名空间,当时以为是spring的一个什么特殊功能,后来研究后才发现是xml的一个知识点,顺便又研究了一下这个知识,找到一篇文章感觉挺好,在此做个记录。
关于命名空间有很多人回避。认为太难。其实命名空间使用很普遍,在xml中也大量存在。初学者搞不清楚是因为关于这方面的教程少且帮助文件中也没有从基础讲起。而从一本厚厚的xml书籍中查询或者看官方网站的介绍又是一种非常苦的事情。这里我把我学习和理解的过程总结下,尽量用通俗的语言写出来。希望能够帮助初学者过这个难关,利益他人。
什么是XML的命名空间:
为了避免XML的标签同名。XML也拥有命名空间。标签可以放入命名空间中,不同的命名空间中的相同名称标签是不同的标签。
在xml文件中,命名空间的定义如下:
<d:student xmlns:d=”http://www.develop.com/student;
其中student 是命名空间的标签。
http://www.develop.com是命名空间的标识。
d是命名空间的前缀。
命名空间标签:
由于命名空间采取元素属性的定义方式,所以需要一个标签。
命名空间标识:
命名空间标识是命名空间最重要的属性,重要到当输出一个命名空间时就直接转换为它的标识。标识有个规范的称呼:URI(统一资源定位符)。URI的最大特点是唯一性。如果不唯一就失去了辨识的意义。实际上相同URI不同的命名空间被看成同一个命名空间。URI分为两种类型:
URL(统一资源定位器):
通俗的说URL就是网页地址。因为每个网页在internat上都是唯一的。
URN(统一资源名称):
可以不使用网页地址而使用唯一名称来定义。如:
urn:2007-12-9/workgrop/xin/projiectname
或 urn:E7f73B13-05FE-44ec-81CE-F898C4A6CDB4
这个编号是在系统中注册的控件编号,因此是唯一的。
前缀:
前缀用于在XML中作为URI的简化引用。因为URI太长了。如:
<d:student xmlns:d="http://www.develop.com/student">
<d:id>3235329</d:id>
<d:name>Jeff Smith</d:name>
</d:student>
使用前缀把标签放入对应的命名空间中。
有了命名空间区分后相同标签名可以不会被错误解析。实际上命名空间加上元素名叫做QName。QName有两个属性:uri和localName,分别获取命名空间名和本地名称。这个QName可以使用xml的name()方法得到。如上例子中的xml文件可以使用如下代码访问:
- var ns:Namespace=xml.namespace();
- var node:XMLList=xml.ns::id;
- var qNameName=node.name();
- trace(qName.uri);
- trace(qName.localName);
命名空间不一点要定义在根节点。可以在任何标签中定义,但只有定义了后才能使用。命名空间还可以嵌套或者被重定义。但这样会增加复杂性。一般用的比较少。一个xml文件中可以拥有多个命名空间。使用命名空间前缀可以轻松处理它们。如:
- <x:transform version=”1.0” xmlns:x=http://www.w3.org/1999/XSL/Transform
- xmlns:d=”urn:dm:student”>
- <x:template match=”student”/>
- <d:template match=”name”/>
- </x:transform>
使用默认命名空间:
在xml文档中,可以使用以下语句定义默认命名空间:
xmlns=<namespace identifier>
使用默认命名空间后,如果不加前缀则引用默认命名空间。使用默认命名空间会降低xml结构的清晰度。要慎用。
相关推荐
### Python XML命名空间详解 在处理XML文档时,命名空间(Namespace)的使用十分常见,尤其是在需要合并多个来源的数据或确保元素唯一性的情况下。本文将详细介绍Python中如何处理XML命名空间,包括理解命名空间的...
2. 定义命名空间:XML Schema支持命名空间,以避免元素和属性名的冲突。通过`targetNamespace`属性可以指定命名空间。 3. 定义元素和属性:使用`<element>`和`<attribute>`标签定义元素和属性,包括它们的名称、类型...
例如,在上面的代码中,我们定义了一个名为 "com.kay.struts2" 的 Package,该 Package 扩展自 "struts-default" Package,并定义了一个名为 "/test" 的命名空间。 Interceptor 元素 Interceptor 元素是 Struts....
XML命名空间: 为了避免元素名冲突,XML引入了命名空间的概念。通过使用命名空间前缀,可以将元素与特定的URI(统一资源标识符)关联,确保在不同上下文中使用相同元素名时不会混淆。 XML Schema和DTD: XML Schema...
NameNode是HDFS的核心组件,负责管理文件系统的命名空间和客户端对文件的访问。日志级别决定了记录日志的详细程度,不同的值代表了不同的日志级别: - "INFO":一般信息性的日志。 - "DEBUG":可以记录命名空间变化...
在Struts2的配置文件(通常为struts.xml或struts-plugin.xml)中,你可以定义多个命名空间,每个命名空间下可以包含多个Action。例如: ```xml <!-- 这里的Action配置属于/admin命名空间 --> <!-- 这里的...
5. 命名空间:为了防止命名冲突,XML支持命名空间,通过 `xmlns` 属性定义,如 `<element xmlns="http://example.com">`。 二、XML解析方式 1. DOM解析:Document Object Model(DOM)解析器将整个XML文档加载到...
- [Struts2命名空间详解](https://struts.apache.org/core-developers/namespaces.html) 通过上述介绍和示例,我们可以看到Struts2中命名空间的配置和使用并不复杂,但合理的设计对于大型项目的成功至关重要。
### XML学习文档详解 #### 一、XML简介与特点 **1.1 XML的基本概念** XML,即Extensible Markup Language(可扩展标记语言),是一种用于描述数据及其结构的标准语言。XML与HTML同属于SGML(Standard Generalized...
1. **不支持命名空间**:在大型项目中,当有多个组织或系统共享相同的元素名称时,命名空间是必需的,而DTD无法直接支持。 2. **没有内置的数据类型**:只能定义元素和属性的存在,不能验证数值或日期等特定类型的...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置存储以及文档结构化描述等领域。...在实际应用中,还要注意XML的验证、命名空间、编码问题等,以确保数据的准确性和一致性。
- `NamespaceURI`: 命名空间 URI。 ##### 2. **CreateElement** - **函数原型:** ```delphi function CreateElement(const TagOrData, NamespaceURI: DOMString): IXMLNode; ``` - **功能描述:**创建一个新...
### Struts.xml配置文件详解 #### 一、Struts配置文件概述 在Struts框架中,`struts.xml`配置文件扮演着极其重要的角色。它主要用于定义应用中的各种配置信息,包括但不限于包(Package)、拦截器(Interceptor)...
- 在XML中,命名空间用于避免标签名冲突。通过引入命名空间前缀,可以使用来自不同来源的标签,如`<myNS:element>`。 - 命名空间使用URI(统一资源标识符)进行唯一标识,但URI并不需要指向一个实际的网络资源。 ...
2. **C#中的XML操作库**:在C#中,我们主要使用System.Xml命名空间中的类来处理XML。主要包括XmlDocument、XmlNode、XmlElement等。XmlDocument是整个XML文档的容器,XmlNode是所有XML节点的基类,XmlElement表示...
1. **XML文档结构**:示例可能包括不同类型的XML文档,展示如何创建符合XML语法规则的结构,以及如何使用命名空间和属性来增加文档的灵活性。 2. **XML Schema定义**:源代码可能会包含XML Schema文件,这些文件...
此外,XML还支持命名空间(Namespaces),以避免标签名称冲突,使用格式如 `xmlns:prefix="URI"` 来声明。 在处理XML时,我们通常会用到DOM(Document Object Model)和SAX(Simple API for XML)两种解析器。DOM将...
本文实例讲述了thinkPHP5.0框架命名空间。分享给大家供大家参考,具体如下: 命名空间 ThinkPHP采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加...
在C#中,我们可以使用`System.Xml`命名空间的类来读取XML。如`XmlDocument`和`XmlNodeReader`: ```csharp using System.Xml; public class ReadXml { public static void Main() { XmlDocument doc = new Xml...