XML学习笔记

来源:互联网 时间:2017-01-22

XML学习笔记

一、XML基本语法            1.所有XML元素都必须有关闭标签。最开头的XML声明不是XML元素,不需要关闭标签。只有一个根节点。        2.XML标签对大小写敏感。        3.XML文档必须有根元素        4.XML的属性值必须加引号,可以单引号,也可以双引号。        5.转义字符:&lt;  <         &gt;  >      $amp;  &        &apos;  '       &quot;  "        6.XML标签中的属性可以用子元素来代替,好处是可以包含更多的子元素和文本内容。        7.XML文件可以用浏览器来查看是否合法。 二、XML显示技术
      1.XML可以使用css进行样式美化,具体用法与HTML一样,在XML中声明<?xml-stylesheet type="text/css" href="test.css"?> 但这种方法不常用。
        2.XML可以采用引用xslt文件(属于XML文件,拓展名为.xsl)的方法来显示,在该文件中可以使用HTML代码。(1)两种引用方式,第一种代码如下:
<?xml-stylesheet version="1.0" type="text/xsl" href="test.xsl"?>
还可以通过JavaScript的ActiveXObject来分别加载XML和XSLT文件,然后使用XML对象的转换函数应用到XSLT对象进行转换。代码如下:
<html><body><script type="text/JavaScript">var xml = new ActiveXObject("Microsoft.XMLDOM");xml.load("test.XML");var xsl = new ActiveXObject("Microsoft.XMLDOM");xsl.load("test.xsl");document.write(xml.transformNode(xsl));</script></body></html>
(2)创建模板在XSLT文件中还需要创建模板,每个模板含有当XML中某个指定节点被匹配时所应用的规则语句如下:
<xsl:template match="/">
match="/" 表示匹配XML的整个文档。
(3)提取某个节点的值使用<xsl:value-of>方法。
<xsl:value-of select="name"/>
(4)循环遍历 <xsl:for-each>
<xsl:for-each select="books/book"><h1><xsl:value-of select="name"/></h1></xsl:for-each>
(5) select的属性值是一个XPath值,如select="books/book[@isbn &gt; '999' ]" @后面是指定过滤条件,例子中指的是isbn属性大于999的节点。
(6)xsl可以指定节点的元素进行排序
<xsl:sort select="id"/>
(7)添加条件测试,<xsl:if>其中有个必选参数,test="expression",若表达式的值为真,则执行里面的内容。
<xsl:if test="id = 1"><h1><xsl:value-of select="name"/></h1></xsl:if>
(8)多重条件测试 <xsl:choose>,需要结合<xsl:when>和<xsl:otherwise>,when也有个必选参数test="expression",与<xsl:if>类似,otherwise则是否则情况。
<xsl:for-each select="books/book"><xsl:choose><xsl:when test="id = 1"><h1><xsl:value-of select="name"/></h1></xsl:when><xsl:otherwise><h6><xsl:value-of select="name"/></h6></xsl:otherwise></xsl:choose>
(9)子模版创建以及调用子模版,<xsl:template match="child">...</xsl:template>写在父模板外面,就像是主函数外面的子函数一样,可以通过<xsl:call-template name="child"/>调用。
子模版代码:
<xsl:template name="child"><xsl:choose><xsl:when test="id = 1"><h1><xsl:value-of select="name"/></h1></xsl:when><xsl:otherwise><h6><xsl:value-of select="name"/></h6></xsl:otherwise></xsl:choose></xsl:template>
调用子模版代码:
<xsl:for-each select="books/book"><xsl: call-template match="child"/></xsl:for-each>


三、XML格式定义技术
有DTD和XML Schema两种方法,XML Schema比DTD有更多优势,以.xsd为扩展名。四、XML JavaScript解析技术
1.加载XML文档
function loadxmlDoc(file){//自定义函数 if(window.ActiveXObject){//IE xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); }else{////Firefox, Mozilla, Opera, etc xmlDoc=document.implementation.createDocument("","",null); } try{ xmlDoc.async=false; xmlDoc.load(file);//chrome没有load方法 }catch(e){ //针对Chrome,不过只能通过http访问,通过file协议访问会报错 var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET",file,false); xmlhttp.send(null); xmlDoc = xmlhttp.responseXML.documentElement; } return xmlDoc; }
2.读取并显示数据重要方法:xmlDoc.getElementsByTagName("book")  获取xmlDoc节点下的<book>...</book>的集合。括号里参数不能写根节点。x.childNodes  获取x子节点的集合,一般用x.childNodes[i]获取第i个子节点,要注意的是如<name>Java</name>,<name>是一个元素节点,其中有个子节点是文本节点"Java",值为Java,"Java"不是<name>节点的值,所以要获得Java这个值要通过 getElementsByTagName("name")[0].childNodes[0].nodeValues。nodeValue获取某个节点的值。示范代码如下:
var ob=loadxmlDoc("test.XML"); var x=ob.getElementsByTagName("book"); for(var i=0;i<x.length;i++){ var name=x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue; var id=x[i].getElementsByTagName("id")[0].childNodes[0].nodeValue; document.write(name + "<br>"); document.write(id + "<br>"); } document.write(x);
注意:要将html页面放到服务器目录下,并通过localhost访问,不然浏览器会报错。


相关阅读:
Top