xml
简介
什么是xml?
-
可扩展标记语言
-
很像HTML
-
设计宗旨是传输数据 > >>>> xml,而不是显示数据 >>>> html
-
标签没有被自定义,需要自定义标签
-
其设计具有自我描述性
-
不会做任何事情,它是被设计用来结构化、存储以及传输信息
用途
- 用于简化数据的存储和共享
- 把数据从HTML中分离
- 简化平台变更
- 使数据更有用
- 很多互联网语言使xml创建的
XML树结构
xml文档形成一种树结构
XML语法
-
xml文档必须有根元素,是所有其他元素的父类
<note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
上面例子中note就是根元素
-
声明
<?xml version="1.0" encoding="utf-8"?>
-
对大小写敏感,标签要用小写
-
注意要正确嵌套
-
给属性赋值的时候必须加引号 如:
<note date="12/11/2007">
-
实体引用 :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqJrghWW-1660616611334)(D:\myDownloads\typora\img\image-20220806105210358.png)]
-
注释:
<!-- -->
-
空格会被保留,多个空格会合并成一个
-
以 LF 存储换行。
XML元素
xml元素是指从 开始标签 到 结束标签的部分
一个元素可以包含:其他元素、文本、属性、或者混合上面三个
XML 元素必须遵循以下命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词
xml元素是可以扩展的
XML属性
- 属性通常提供不属于数据组成部分的信息
- 属性必须加引号
- 如果属性的信息看起来很像数据,那就用元素吧
- 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
总结:能用元素就不要用属性
XML验证
通过 DTD 验证的XML是"合法"的 XML。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面例子中,DOCTYPE声明是对外部DTD文件的引用
xml DTD
DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
XML Schema
基于 XML 的 DTD 代替者
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
XML 验证器
在XML菜鸟教程中有验证器,把代码放进去,就可以验证是否正确
XML 的显示
用css显示
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
把上面这个代码,复制到声明的下面,即可用css显示xml
用XSLT显示
XSLT 是首选的 XML 样式表语言,它比css更加完善
XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML
XML javascript
xml HttpRequest
-
创建xml HttpRequest
xmlhttp=new XMLHttpRequest();
XML解析器
解析 XML 文档
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
解析 XML 字符串
txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}
XML DOM
- 定义了访问和操作 XML 文档的标准方法。
- XML DOM 把 XML 文档作为树结构来查看。
- 所有元素可以通过 DOM 树来访问。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。
加载一个 XML 文件 - 跨浏览器实例
<!-- Edited by XMLSpy® -->
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<!DOCTYPE html>
<html>
<body>
<h1>W3Cschool Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br>
<b>From:</b> <span id="from"></span><br>
<b>Message:</b> <span id="message"></span>
</div>
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","note.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
加载一个 XML 字符串 - 跨浏览器实例
<html>
<body>
<h1>W3Schools Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</div>
<script>
txt="<note>";
txt=txt+"<to>Tove</to>";
txt=txt+"<from>Jani</from>";
txt=txt+"<heading>Reminder</heading>";
txt=txt+"<body>Don't forget me this weekend!</body>";
txt=txt+"</note>";
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(txt);
}
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
XML 命名空间
命名空间是在元素的开始标签的 xmlns 属性中定义的。
命名空间声明的语法:xmlns:前缀=“URI”。
如:
<root>
<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>
<f:table xmlns:f="http://www.w3cschool.cc/furniture">
......
</root>
当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。
即:在root开始标签中加入
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture">
实际使用中的命名空间
XSLT 是一种用于把 XML 文档转换为其他格式的 XML 语言,比如 HTML。
在下面的 XSLT 文档中,您可以看到,大多数的标签是 HTML 标签。
非 HTML 的标签都有前缀 xsl,并由此命名空间标识:xmlns: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>