一、基本语法
<?xml version="1.0" encoding="UTF-8"?> <REQUEST> <appnt> <name>SAM-SHO</name> <age>28</age> </appnt> </REQUEST>
1、XML的申明:它定义 XML 的版本 (1.0) 、所使用的编码 (UTF-8)以及是否独立(yes)。注意在?之间?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1)这边的编码是指打开这个xml文档时的编码:
2)如:申明为UTF-8的xml,打开时却会有乱码:(用eclipse不存在问题,只要工作台的编码正确即可)
A、我们用编辑器编辑具有中文的xml保存时,如果没有指定保存的编码,编辑器就会查找本地默认的码表,即默认本地的编码然后保存到硬盘上。如是中文系统,就是GB2312码表。
B、我们用IE打开保存的这个xml文档时,读到的就是保存时的数据,编码为GB2312。但是IE解析的时候会查找xml的申明,<?xml version="1.0" encoding="UTF-8"?>发现这边是UTF-8,就会去查找UTF-8码表,这样就会乱码。
C、解决方法1:修改申明,<?xml version="1.0" encoding="GB2312"?>这样很明显不符合我们的要求。
D、解决方法2:编辑器保存的时候,指定编码即可。如记事本保存的时候,点击另存为即可指定保存的编码。
E、eclipse不存在问题,因为eclipse在保存xml文档的时候会查看xml的申明编码,然后与申明编码保持一致。
2、standalone:说明这个xml文档是否独立。具体是指,在使用的时候这份文档是否依赖其他的文档。
如设置为standalone=no,即非独立的文档时,但是IE解析的时候不关注这个属性。
3、有且只有一个根元素:<REQUEST>.....</REQUEST>
<appnt> <name>SAM-SHO</name> <age>28</age> </appnt>
5、XML 标签对大小写敏感:
在 XML 中,标签 <Name> 与标签 <name> 是不同的。必须使用相同的大小写来编写打开标签和关闭标签
<name>这是错误的</NAME> <age>28</age>
与 HTML 类似,XML 也可拥有属性(名称/值的对)。在 XML 中,XML 的属性值须加引号。
<insured name="SAMMY" age="24"></insured> <!-- 正确 --> <insured name= SAMMY age= 24 ></insured> <!-- 错误 -->
7、实体引用:
在 XML 中,一些字符拥有特殊的意义。如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生 XML 错误:
<message>if salary < 1000 then</message>
以上xml可以这样写:
<message>if salary < 1000 then</message>
8、CDATA:术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据
CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<name> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]> </name>
9、XML 中的注释:
<!-- 正确 -->
10、在 XML 中,空格会被保留。在 XML 中,文档中的空格不会被删节。
<!-- 输出不一样 --> <name>空格会被保留</name> <name>空格会 被保留</name>
二、高级语法
1、XML 命名空间(XML Namespaces)
1)当两个不同的文档使用相同的元素名时,就会发生命名冲突。XML 命名空间提供避免元素命名冲突的方法。
<product> <name>SAM_SHO</name> <price>280</price> <disc>桌子</disc> </product>
<product> <dis>this is dest</dis> <play>吃饭</play> </product>
以上两个元素在两个不同的文档中,假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <product> 元素,就会发生命名冲突。
2)使用前缀来避免命名冲突:
<a:product> <a:name>SAM_SHO</a:name> <a:price>280</a:price> <a:disc>桌子</a:disc> </a:product>
<b:product> <b:dis>this is dest</b:dis> <b:play>吃饭</b:play> </b:product>
现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <product> 元素 (<a:product> 和 <b:product>)。
通过使用前缀,我们创建了两种不同类型的 <product> 元素。
3)使用命名空间(Namespaces)
XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:
xmlns:namespace-prefix="namespaceURI"
为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。
<product xmlns="http://www.w3.org/TR/html4/"> <name>SAM_SHO</name> <price>280</price> <disc>桌子</disc> </product>
<product xmlns="http://www.w3school.com.cn/furniture"> <dis>this is dest</dis> <play>吃饭</play> </product>
4)XmlSchema 其实就是一个Namespaces,然后用来规范实现的xml文档。