XML学习笔记

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访问,不然浏览器会报错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值