小毛驴(xml)试乘记(三):jQuery方法

jQuery可以像处理HTML的DOM那样处理xml,xml节点的存取就更简单一些。


这里需要三个文件。

第一,html文件,其中定义的显示数据的模板

第二,xml文件。数据本身。

第三,javascript文件。其中定义如何解释xml并将其添加到html文件之中。

有关注释附加在各文件相关行附近。


html文件

<html>
 <head>
  <style type="text/css"> <!--css的定义-->
	body {font_family:Arial, helvetica, sans_serif; font_size:12pt; background_color:white;}
    table, td, th { border: thin #2b2b2b solid; border-collapse:collapse; padding:4px; background_color:white; color:black;}	
  </style>
 </head>
<body>
<table class="tbl">
<tbody>
<tr id="xml_header">
 <th>Entry</th> <th>Service</th> <th>Action</th>
</tr>
<tr id="xml_data"><!--XML数据的模板行-->
  <td>#Entry#</td> <td>#Service#</td> <td>#Action#</td>
</tr>
</tbody>
</table>


<!--需要参照jquery的函数库。也可以下载到自己的服务器或PC上使用-->
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> 
<script src="info.js"></script>
</body>
</html>

xml文件:data.xml

<?xml version="1.0" encoding="UTF-8" ?>
<config> <!--在config和rules之间有许多数据,这里简化-->
 <devices>
  <entry>
    <vsys>
	 <entry>
	  <rulebase>
       <security>
		<rules>
		<entry  name="GlobalProtect">
		<action>allow</action>
		<service>
		 <member>service-https</member>
		 <member>TCP_80</member>
		</service>
		</entry>
		<entry name="ping_deny">
		<action>allow</action>
		<service>
		 <member>DNS</member>
		 <member>service-https</member>
		 <member>TCP_80</member>
		</service>
		</entry>
		<entry  name="ping">
		<action>deny</action>
		<service>
		 <member>any</member>
		</service>
		</entry>
		</rules>
      </security>
	 </rulebase>
	</entry>
   </vsys>
  </entry>
 </devices>
</config>

javascript文件:info.js

// -------------------------------------------------
// Initialization
// -------------------------------------------------
var xml_header, xml_data;
$(function(){
    //从HTML文件中读取表头和表行的html文本
	xml_header = $("#xml_header").html();
	xml_data   = $("#xml_data").html();
	//初始化表格
    $("table.tbl tbody").html("");
	//加载自定义函数
	xmlLoad();

});

// -------------------------------------------------
// XML loading
// -------------------------------------------------

function xmlLoad(){
    $.ajax({
        url:'data.xml',
        type:'get',
        dataType:'xml',
        timeout:1000,
        success:parse_xml
    });
}

// -------------------------------------------------
// 为处理XML做准备
// -------------------------------------------------

function parse_xml(xml,status){
    if(status!='success')return;
	// 添加表头
	$('<tr>'+xml_header+'</tr>').appendTo('table.tbl tbody');
    $(xml).find('rules').find('entry').each(disp);
}

// -------------------------------------------------
// 重写HTML
// -------------------------------------------------

function disp(){

    //取得entry的属性name
    var $entry = $(this).attr('name');
	//取得action的单一值
    var $action = $(this).find('action').text();
	//取得service的多个值,然后更换换行符(\n)为html的<br>
    var $service = $(this).find('service').text().split('\n').join('<br />');

    //根据HTML文件按中的模板行
	//【<td>#Entry#</td> <td>#Service#</td> <td>#Action#</td>】重写表行
	var html_data = xml_data.replace('#Entry#',$entry).replace('#Service#',$service).replace('#Action#',$action);
    $('<tr>'+html_data+'</tr>').appendTo('table.tbl tbody');
}


验证结果

Entry Service Action
GlobalProtect service-https
TCP_80
allow
ping_deny DNS
service-https
TCP_80
allow
ping any deny

文件在当地PC上,Firefox/Safari 可以正确处理显示该html文件。

如果将以上三个文件上传到web服务器,IE/Chrome/Firefox/Safari都可正确处理显示该html文件。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。