XML解析

一、xsl+xml实现分页
1. 代码:

message.xml
 1 <?xml version="1.0" encoding="utf-8" ?> 
 2 <?xml-stylesheet type="text/xsl" href="MessageXML.xsl" ?>
 3 <MessageS>
 4 <Message>
 5     <UserIdSend>000</UserIdSend>
 6     <UserNameSend>张三</UserNameSend>
 7     <UserTypeSend>0</UserTypeSend>
 8     <UserId>45600</UserId>
 9     <UserName>李四</UserName>
10     <UserType>6</UserType>
11     <MessageContent>hello</MessageContent>
12     <MessageTime>2012-9-20 12:50:16</MessageTime>
13 </Message>
14 <Message>
15     <UserIdSend>000</UserIdSend>
16     <UserNameSend>李四</UserNameSend>
17     <UserTypeSend>6</UserTypeSend>
18     <UserId>45600</UserId>
19     <UserName>张三</UserName>
20     <UserType>0</UserType>
21     <MessageContent>hi...</MessageContent>
22     <MessageTime>2012-9-20 13:02:00</MessageTime>
23 </Message>
24 <Message>
25     <UserIdSend>000</UserIdSend>
26     <UserNameSend>张三</UserNameSend>
27     <UserTypeSend>0</UserTypeSend>
28     <UserId>45600</UserId>
29     <UserName>李四</UserName>
30     <UserType>6</UserType>
31     <MessageContent>你在哪里</MessageContent>
32     <MessageTime>2012-9-20 13:10:00</MessageTime>
33 </Message>
34 <Message>
35     <UserIdSend>000</UserIdSend>
36     <UserNameSend>李四</UserNameSend>
37     <UserTypeSend>6</UserTypeSend>
38     <UserId>45600</UserId>
39     <UserName>张三</UserName>
40     <UserType>0</UserType>
41     <MessageContent>扬州</MessageContent>
42     <MessageTime>2012-9-20 13:20:00</MessageTime>
43 </Message> 
44 </MessageS>
MessageXML.xsl
  1 <?xml version="1.0" encoding="utf-8" ?> 
  2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  3 <xsl:template match="/">
  4 <html>
  5 <head> 
  6 <style>body,MessageS,Message,UserNameSend,MessageTime,
  7           MessageContent{ font: 12px "宋体", "Arial", "Times New Roman"; } table { font-size: 12px; border: 0px double; border-color: #99CC99 #99CC99 #CCCCCC #CCCCCC; cellpadding:3;cellspacing:3; bgcolor:#eeeeee; text-decoration: blink} span { font-size: 12px; color: red; } .keybutton { cursor:hand; font-size: 12px; color: #003300; background: #ffffff; border: 0px solid;}</style> 
  8 <script>
  9 function taxis(x) //……………………排序
 10 { 
 11 var temp = 0;
 12 stylesheet=document.XSLDocument; 
 13 source=document.XMLDocument; 
 14 temp=parseInt(document.forms[0].text5.value);
 15 temp++;
 16 if(temp%2==0){
 17 x="-"+x;
 18 }else{
 19 x=x;
 20 } 
 21 document.forms[0].text5.value = temp;
 22 sortField=document.XSLDocument.selectSingleNode("//@order-by");
 23 sortField.value=x; 
 24 Layer1.innerHTML=source.documentElement.transformNode(stylesheet); 
 25 }
 26 </script><script>
 27 <xsl:comment>
 28 //…………………………分页 
 29 <![CDATA[ 
 30 var OnePageNum=10; //每页显示五条
 31 var PageNum=1; //当前页码
 32 var XMLPageNum=1; //xml文件总的页码
 33 function pages(Num) 
 34 { 
 35 stylesheet=document.XSLDocument; //获取值xml的所有值?
 36 source=document.XMLDocument; //获取值xml的所有值?
 37 nodes=source.documentElement.childNodes;//获取所有子结点集?
 38 len=nodes.length; //计算结点的个数,并把值赋给len
 39 for(i=1;i<=(len/OnePageNum);i++); //计算出共有几页
 40 if(len%OnePageNum!=0){
 41    XMLPageNum=i; //计算出总的页码并把值传给 XMLPageNum
 42 }else{
 43    XMLPageNum=i-1;
 44 }
 45 var firstNum=0; //每页显示的第一条,给初值为0
 46 var lastNume=0; //每页显示的最后一条,给初值为0
 47 if (Num=="first") {PageNum=1;} //如果传入的是第一页,则执行这个语句,赋给当前页码的值为1
 48 if (Num=="previous") {if (PageNum>1) PageNum -=1;} //判断
 49 if (Num=="next") {
 50    if (PageNum<XMLPageNum) {
 51     PageNum +=1;
 52    }
 53 }   //判断
 54 if (Num=="last") {PageNum =XMLPageNum;}   //判断
 55 if (Num!="last"&&Num!="next"&&Num!="previous"&&Num!="first"){
 56    var temp=parseInt(document.forms[0].text4.value);
 57    if(temp<=XMLPageNum&&temp>=1&&temp==document.forms[0].text4.value){
 58     PageNum=temp;
 59    }else{
 60     alert("你查询的页面大于总页码!");
 61     document.forms[0].text4.value="";
 62     document.forms[0].text4.focus();
 63    
 64    }
 65 }sortField=document.XSLDocument.selectSingleNode("//@expr");
 66 firstNum=OnePageNum*(PageNum-1)+1; //显示的第一条的位置
 67 lastNum=OnePageNum*(PageNum-1)+OnePageNum; //显示的最后一条的位置
 68 text="childnumber(this)>="+firstNum+" & childnumber(this)<="+lastNum;// 
 69 sortField.value=text; //
 70 Layer1.innerHTML=source.documentElement.transformNode(stylesheet); 
 71 document.forms[0].text1.value=XMLPageNum;
 72 document.forms[0].text2.value=len;
 73 document.forms[0].text3.value=PageNum;
 74 document.forms[0].text4.value="";
 75 } 
 76 ]]> 
 77 </xsl:comment>
 78 </script>
 79 </head>
 80 <body onLoad="pages('first');">
 81 <form>
 82 <input type="hidden" name="text5" value="2010-2-1 16:57:00" /> 
 83 <table align="center" width="600">
 84 <tr><td><button id="cmdfirstPage" class="keybutton" onclick="pages('first');">首页</button> 
 85          <button id="cmdpreviousPage" class="keybutton" onclick="pages('previous');">上一页</button> 
 86          <button id="cmdnextPage" class="keybutton" onclick="pages('next');">下一页</button> 
 87          <button id="cmdlastPage" class="keybutton" onclick="pages('last');">尾页</button>   
 88          <input type="text" id="text3" readOnly="true" size="1" maxLength="1" />/
 89          <input type="text" id="text1" readOnly="true" size="1" maxLength="1" /> 90      总计<input type="text" id="text2" readOnly="true" size="1" maxLength="1" />条记录 
 91    跳转页<input type="text" id="text4" size="3" maxLength="3" /> 
 92          <button id="" class="keybutton" onclick="pages('2');">提交</button>   
 93      </td></tr>
 94 </table> 
 95 </form>
 96 <div id="Layer1" name="Layer1">
 97 <xsl:apply-templates select="MessageS" /> 
 98 </div>
 99 </body>
100 </html>
101 </xsl:template>
102 <xsl:template match="MessageS">
103 <table width="700" border="1" align="center" cellpadding="1" cellspacing="1" bordercolordark="#ffffff" bordercolorlight="#ADAAAD">
104 <tr bgcolor="#FFCC99" align="center">
105 <td style="cursor:s-resize" width="8%"   onClick="taxis('UserNameSend')">发信人</td> 
106 <td style="cursor:s-resize" width="18%" onClick="taxis('MessageTime')">时间</td> 
107 <td style="cursor:s-resize" width="74%" >信息内容</td> 
108 </tr>
109 <xsl:apply-templates select="Message" order-by="MessageTime" /> 
110 </table>
111 </xsl:template>
112 <xsl:template match="Message">
113 <xsl:if expr="childnumber(this)>=1">
114 <tr align="center">
115 <xsl:apply-templates select="UserNameSend" /> 
116 <xsl:apply-templates select="MessageTime" /> 
117 <xsl:apply-templates select="MessageContent" />   
118 </tr>
119 </xsl:if>
120 </xsl:template>
121 <xsl:template match="UserNameSend">
122 <td bgcolor="#eeeeee">
123 <xsl:value-of /> 
124 </td>
125 </xsl:template>
126 <xsl:template match="MessageTime">
127 <td>
128 <xsl:value-of /> 
129 </td>
130 </xsl:template>
131 <xsl:template match="MessageContent">
132 <td align="left" >
133 <xsl:value-of /> 
134 </td>
135 </xsl:template>
136 </xsl:stylesheet>

2. 讲解:

  • message.xml 是数据文件;
  • MessageXML.xsl 是格式文件。  

3. XML例子文件的使用方法 

  • 将两个文件按照文件名分别保存;
  • 用浏览器浏览XML文件即可。

4. 效果

二、创建xml文件

代码:

实例
 1   /// <summary>
 2         /// 创建XML文件
 3         /// </summary>    
 4         /// <param name="strFileName">XML文件名(groupName_NOTICES.xml/groupName_TASKLIST.xml)</param>
 5         /// <param name="strFileDirectory">XML路径:若为空程序默认路径</param>
 6         /// <param name="intDistinct">0:公告,1:任务列表</param>
 7         /// <returns>创建成功返回1 ,否则0</returns>
 8         public int CreateXMLFile(string strFileName, string strFileDirectory, int intDistinct)
 9         {
10             int retValue = 0;
11 
12             if (strFileDirectory != null && strFileDirectory.Length > 0)
13             {
14                 CheckDirectoryExist(strFileDirectory);
15             }
16             else
17             {
18                 CheckDirectoryExist(strDefaultPath);
19                 strFileDirectory = strDefaultPath;
20             }
21 
22             if (!File.Exists(strFileDirectory + "\\" + strFileName))
23             {
24                 try
25                 {
26                     XmlDocument xmlDocument = new XmlDocument();
27                     //加入XML的段落版本声明
28                     XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "UTF-8", "yes");
29                     xmlDocument.AppendChild(xmlDeclaration);
30 
31                     //创建处理指令
32                     string strProcessing = string.Empty;
33                     XmlProcessingInstruction xmlProcessingInstruction = null;
34 
35                     //创建根元素
36                     XmlElement xmlElementRoot = null;
37 
38                     if (intDistinct == 0)
39                     {
40                         strProcessing = "type='text/xsl' href='Document_Notice.xsl'";
41                         xmlProcessingInstruction = xmlDocument.CreateProcessingInstruction("xml-stylesheet", strProcessing);
42 
43                         xmlElementRoot = xmlDocument.CreateElement("NOTICES");
44                     }
45                     else
46                     {
47                         strProcessing = "type='text/xsl' href='Document_TaskList.xsl'";
48                         xmlProcessingInstruction = xmlDocument.CreateProcessingInstruction("xml-stylesheet", strProcessing);
49 
50                         xmlElementRoot = xmlDocument.CreateElement("TASKLIST");
51                     }
52 
53                     xmlDocument.AppendChild(xmlProcessingInstruction);
54                     xmlDocument.AppendChild(xmlElementRoot);
55                     xmlDocument.Save(strFileDirectory + "\\" + strFileName);
56 
57                     retValue = 1;
58                 }
59                 catch (XmlException xmlEx)
60                 {
61                     LogErrorWrite log = new LogErrorWrite();
62                     log.logWrite("CreateXMLFile :" + xmlEx.ToString(), 1);
63                 }
64             }
65 
66             return retValue;
67         }

测试效果:

posted on 2012-09-20 13:34  YZDONET  阅读(237)  评论(0编辑  收藏  举报