XML 命名空间(XML Namespaces)
XML 命名空间提供避免元素命名冲突的方法。
命名冲突
在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
这个 XML 文档携带着某个表格中的信息:
<table>
<tr> <td>Apples</td> <td>Bananas</td> </tr></table>
这个 XML 文档携带有关桌子的信息(一件家具):
<table>
<name>African Coffee Table</name> <width>80</width> <length>120</length></table>
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。
XML 解析器无法确定如何处理这类冲突。
使用前缀来避免命名冲突
此文档带有某个表格中的信息:
<h:table>
<h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table>
此 XML 文档携带着有关一件家具的信息:
<f:table>
<f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>
现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table> 和 <f:table>)。
通过使用前缀,我们创建了两种不同类型的 <table> 元素。
使用命名空间(Namespaces)
这个 XML 文档携带着某个表格中的信息:
<h:table xmlns:h="http://www.w3.org/TR/html4/"
>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
此 XML 文档携带着有关一件家具的信息:
<f:table xmlns:f="http://www.w3school.com.cn/furniture"
>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
与仅仅使用前缀不同,我们为 <table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。
XML Namespace (xmlns) 属性
XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:
xmlns:namespace-prefix="namespaceURI"
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。
统一资源标识符(Uniform Resource Identifier (URI))
统一资源标识符是一串可以标识因特网资源的字符。最常用的 URI 是用来标示因特网域名地址的统一资源定位器(URL)。另一个不那么常用的 URI 是统一资源命名(URN)。在我们的例子中,我们仅使用 URL。
默认的命名空间(Default Namespaces)
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
请使用下面的语法:
xmlns="namespaceURI"
这个 XML 文档携带着某个表格中的信息:
<table xmlns="http://www.w3.org/TR/html4/"
>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
此 XML 文档携带着有关一件家具的信息:
<table xmlns="http://www.w3school.com.cn/furniture"
>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
命名空间的实际应用
当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。
如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:"http://www.w3.org/1999/XSL/Transform":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
相关文章
- 关于web.xml配置的那些事儿
- 最全三大框架整合(使用映射)——struts.xml和web.xml配置
- java实现遍历树形菜单方法——struts.xml实现
- 将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹
- Eclipse导入android项目包xml报错未生成R文件
- JAVA Eclipse 创建android xml看不到预览怎么办
- struts2框架xml验证
- C#操作XML(带命名空间)
- Java servlet项目里的web.xml
- 一个json格式转xml格式的java实现
- 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
- C# 通过传入节点name及节点value,来删除XML相应节点
- Atitit xml转json总结 目录 1.1. XML和JSON之间没有直接映射;元素类型问题1 1.2. Xml与json的对应关系2 1.3. 范例2 2. Jsonlib的问题,,不
- log4j.xml(信息打印)
- 为Android系统添加config.xml 新配置的设置
- ADT(Android)—Eclipse开发AndroidManifest.xml在哪里
- python XML文件解析:用xml.dom.minidom来解析xml文件
- JAVA web.xml中引用多个XML
- WebService(2)-XML系列之Java和Xml之间相互转换
- Python 解析含有命名空间(xmlns)的xml文件(基于ElementTree)
- 集合映射中的映射包(使用xml文件)