xml学习笔记

xml

简介

什么是xml?

  • 可扩展标记语言

  • 很像HTML

  • 设计宗旨是传输数据 > >>>> xml,而不是显示数据 >>>> html

  • 标签没有被自定义,需要自定义标签

  • 其设计具有自我描述性

  • 不会做任何事情,它是被设计用来结构化、存储以及传输信息

用途

  • 用于简化数据的存储和共享
  • 把数据从HTML中分离
  • 简化平台变更
  • 使数据更有用
  • 很多互联网语言使xml创建的

XML树结构

xml文档形成一种树结构

XML语法

  1. xml文档必须有根元素,是所有其他元素的父类

    <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
    

    上面例子中note就是根元素

  2. 声明

    <?xml version="1.0" encoding="utf-8"?>
    
  3. 对大小写敏感,标签要用小写

  4. 注意要正确嵌套

  5. 给属性赋值的时候必须加引号 如:<note date="12/11/2007">

  6. 实体引用 :

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqJrghWW-1660616611334)(D:\myDownloads\typora\img\image-20220806105210358.png)]

  7. 注释:<!-- -->

  8. 空格会被保留,多个空格会合并成一个

  9. 以 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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小墩墩~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值