ホームページ バックエンド開発 XML/RSS チュートリアル XML は並べ替え可能でページ分割されたデータ表示ページを作成します

XML は並べ替え可能でページ分割されたデータ表示ページを作成します

Mar 07, 2017 pm 04:34 PM

Web 開発では、データ レコード セットのページング表示と並べ替えが頻繁に行われます。これは、ASP、php、jsp などのサーバー側のコードとデータベース テクノロジを使用して、サーバー側で非常に簡単に実行できます。ただし、クライアント上で複数のレコードを表示して並べ替える必要がある場合は、頭痛の種になる可能性があります。以下では、Extensible Markup Language (xml、拡張可能なマークアップ言語) と Extensible Stylesheet Language Transformations (XSLT、拡張可能なスタイル単一言語変換) を XML パス言語 (XPath、XML パス言語) と組み合わせて使用​​しており、簡単なコードを記述するだけです。簡単に達成できます。この方法により、頻繁にサーバーとやり取りするプロセスが回避され、データ表示の時間が短縮され、閲覧者は待たずに結果を確認できるため、サーバーの負荷も軽減できます。加えて。 XML と XSLT テクノロジーのおかげで、データの保存と表示が分離され、コードを再利用できるため、コードを作成するプログラマーの負担が大幅に軽減されます。
以下では、関数を段階的に実装します。

最初: XSLT を作成します

XSLT スタイル シートの 1 行目は、XML が準拠する XML 仕様のバージョンを示し、次にスタイル シートで使用される名前空間を示します。ここでは、スタイル シートの正式なバージョンに基づいて記述します。 XSL の仕様と XSL を使用しないドラフトの書き方:

   <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
ログイン後にコピー

注: 両者の間には機能と書き方に大きな違いがあります。

 <?xml version="1.0"?>  
   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
ログイン後にコピー

次に、XSLT でテンプレート タグを定義します。

<xsl:template match="/">  
   <xsl:apply-templates select="/客户关系表"/>  
   </xsl:template>  
    
   <xsl:template match="/客户关系表"></xsl:template>
ログイン後にコピー


表示するスタイルをテンプレートに記述します。データの保存には HTML データ アイランドを使用します。これらのデータは、SQL Server 2000 の XML クエリを使用して取得できます。XML をサポートしていないデータベースの場合は、独自のコンポーネントを作成してデータを XML 形式に変換し、それを XML 形式に変換できます。内部のデータアイランド。 HTML でデータ アイランドを使用するには 2 つの方法があります:
1 つは、以下に示すように、データを直接埋め込む方法です:

 <XML id=&#39;&#39;Data&#39;&#39;>  
   <客户关系表>  
   <客户>每条数据</客户>  
   </客户关系表>  
   </XML>
ログイン後にコピー

もう 1 つは、以下に示すように、SRC 属性を通じて外部ファイルを参照する方法です:

 <XML id=&#39;&#39;Data&#39;&#39; src=&#39;&#39;Data.xml&#39;&#39;></XML>
ログイン後にコピー

データを使用するにはもちろん、XSLT ファイルも XML 形式ファイルの一種なので、次の方法でも実現できます:

<XML id=&#39;&#39;Style&#39;&#39; src=&#39;&#39;Style.xsl&#39;&#39;></XML>
ログイン後にコピー

にマークアップ DIV を追加します。変換結果を表示するページ:

   <div id="DisplayArea"></div>
ログイン後にコピー


XSLT を使用してデータアイランド内のデータを変換し、DOMDocument の transNode() メソッドを使用し、DIV の innerHTML 属性を介して結果を表示します:

DisplayArea.innerHTML = Data.transformNode(Style.DocumentElement)
ログイン後にコピー

Step 2: クライアント側の並べ替え機能を実装します

ここでは、デフォルトの並べ替えキーワードとして「シリアル番号」を選択し、XSLT に並べ替えタグを追加します:

<xsl:for-each select="客户">  
   <xsl:sort select="序号" order="descending" data-type="number"/>  
   </xsl:for-each>
ログイン後にコピー

。次に、ユーザーの操作に応答できるように、ソート関数をスタイル シートに追加します。テーブル ヘッダーの各列に onClick イベントを追加します。これにより、sort() 関数が呼び出され、ユーザーが列を並べ替えることができるようになります。テーブルのヘッダーをクリックします。

  <td onClick="sort(&#39;&#39;序号&#39;&#39;)">序号</td>  
   Sort()函数的语句如下所示:  
   Function Sort(strField)  
    
   Dim sortField  
   Dim sortOrderAttribute  
    
   &#39;&#39; 得到原来排序字段的属性值  
   Set sortField = Style.XMLDocument.selectSingleNode("//xsl:sort/@select")  
    
   &#39;&#39; 得到原来排序的顺序属性值  
   Set sortOrderAttribute = Style.XMLDocument.selectSingleNode("//xsl:sort/@order")  
    
   &#39;&#39; 如果我们已经按所点击的列的字段排序,我们必须改变排序的顺序;  
   &#39;&#39; 否则,我们只需要按新所点击的列字段按默认的顺序进行排序  
   If sortField.Value = strField Or sortField.Value = "./*[0]" Then  
   If sortOrderAttribute.Value = "descending" Then  
   sortOrderAttribute.Value = "ascending"  
   Else  
   sortOrderAttribute.Value = "descending"  
   End If  
   Else  
   sortField.Value = strField  
   sortOrderAttribute.Value = "ascending"  
   End If  
    
   Set sortField = Nothing  
   Set sortOrderAttribute = Nothing  
   &#39;&#39; 输出排序后的结果  
   DisplayArea.innerHTML = Data.transformNode(Style.DocumentElement)  
    
   End Function
ログイン後にコピー

次に、各ページのレコード数の表示と前後のページを設定する機能を実装します。現在どのページが表示されているか、合計ページ数、合計レコード数を表示するには、spanタグを使用します。デフォルトでは、ページごとに 6 レコードを表示し、変数 intRecordsPerPage を使用してこの値を保存します。

<table width="100%" border="0" style="font-size:9pt">  
   <tr>  
   <td align="left"><b>第 <span id="CurrentPage"></span> 页 总 <span id="PageCount"></span> 页    共有 <span id="RecordCount"></span> 条记录</b></td>  
   <td align="right"><b>每页记录数:<input onblur="setRecordsPerPage()" id="RecordsPerPage" style="vertical-align:middle;height:15pt;width:30px"/></b></td>  
   <td align="right">  
   <span id="Paging">  
   <input type="button" OnClick="FirstPage()" value="第一页"/>  
   <input type="button" OnClick="PReviousPage(1)" value="上一页"/>  
   <input type="button" OnClick="nextPage(1)" value="下一页"/>  
   <input type="button" OnClick="LastPage()" value="最末页"/>  
   </span>  
   </td>  
   </tr>  
   </table>
ログイン後にコピー

以下では、さまざまなページを変換するプロセスを説明するための例として、[次のページ] ボタンによって実行される操作を使用します。この関数は、表示されるレコードの数と、パラメーター intPage に基づいて対応するページを決定します。各ボタンの Value 値の変更は、XSL DOM の内容を動的に変更することで実現されます。

Function nextPage(intPage)  
    
   Dim strDisplay  
   Dim strDateRange  
    
   If CInt(CStr(intPage) * intRecordsPerPage) < _  
   Data.selectNodes("/客户关系表/客户").length Then  
   intPage = CInt(intPage) + 1  
    
   Style.XMLDocument.selectNodes("//@OnClick") _  
   (1).Value = "previousPage(" & intPage & ")"  
    
   Style.XMLDocument.selectNodes("//@OnClick") _  
   (2).Value = "nextPage(" & intPage & ")"  
    
   Style.XMLDocument.selectNodes _  
   ("//xsl:for-each/@select")(1).Value = _  
   "./客户[position() <= " & (CStr(intPage) _  
   * intRecordsPerPage) & " and position() > " _  
   & (CInt(intPage) - 1) * intRecordsPerPage & _  
   "]"  
    
   redisplay (intPage)  
    
   End If  
    
   End Function
ログイン後にコピー

下面,我们来看看设置每个页面记录条数的函数setRecordsPerPage(),该函数通过动态修改xsl:for-each的select属性值来实现的,使用XPath来遍历那些符合节点位置大于0并且节点位置小于每页记录数加1的那些节点。其中主要的语句是下面的一行:
Style.XMLDocument.selectNodes("//xsl:for-each/@select")(1). _
value = "./客户[position() < " & intRecordsPerPage + 1 & " and "& " position() > 0]"
到目前为止,我们的页面既可以实现排序,也实现动态改变每页显示记录条数的功能了,为了实现可重用的要求,我们还可以进行进一步的改进。XPath是进行XML/XSLT应用开发的一个强有力的工具,XPath中可以使用通配符,使XSLT样式单文件完全不依赖于你的数据节点名称。因此,我们在改变XML数据的时候,只要不改变节点的层次关系,可以不必改动XSLT就可以直接使用。比如:在本例中,你可以添加或者删除某些字段、或添加删除一些记录,直接使用本例中的XSLT,不但可以在表格里正常显示出数据,而且还能正常排序和分页。
下面我们就分析一下是如何实现的。比如下面的层次关系:

 <客户关系表>  
   <客户>  
   <序号></序号>  
   <姓名></姓名>  
   <电子邮件></电子邮件>  
   </客户>  
   </客户关系表>
ログイン後にコピー

假如我们的XSLT中有这样一个选择模板的句子:

<xsl:apply-templates select="/客户关系表"/>
ログイン後にコピー

为了实现通用性的要求,我们可以使用通配符:

  <xsl:apply-templates select="/*"/>
ログイン後にコピー

这里我们使用了子运算符"/",它选择了根下的所有节点,两者的不同点在于:"/客户关系表"选择的是根下的客户关系表子节点,而"/*"选择的是根下所有的直接子节点,在上面的XML数据格式中,二者是完全等价的。
对于下面的for-each循环来说:

<xsl:for-each select="客户">  
   <xsl:sort select="序号" order="ascending"/>  
   </xsl:for-each>
ログイン後にコピー

我们可以改变成这样的形式:

  <xsl:for-each select="./*">  
   <xsl:sort select="./*[1]" order="ascending"/>  
   </xsl:for-each>
ログイン後にコピー

这里"./*"表示你应当包含进去当前节点下所有的一级子节点,语法"./*[1]"表示的是选择当前节点中的第一个子节点。
另外还有一个地方可以改进的是,我们可以把它改成,表示在每一次循环中选择当前节点。
在我们的函数中,还使用了一些硬代码,如果不做改动的话,我们的通用性还是实现不了,因此,我们下面就看看如何替换硬代码中的语句。
在创建表头的时候,我们使用了 序号的语句,如果XML数据里没有序号节点的话,这里显然会出现错误的,为了实现通用性,我们自定义了一个函数getName,来取得所要显示的节点的名称:

<td>  
   <xsl:attribute name="onClick">  
   Sort(&#39;&#39;<xsl:value-of select="user:getName(.)"/>&#39;&#39;)  
   </xsl:attribute>  
   <xsl:value-of select="user:getName(.)"/>  
   </td>
ログイン後にコピー

自定义函数是XSLT的一个突出的功能,要使用这个特性,我们得用msxml:script元素来定义,同时,必须在样式单定义的时候指定一个用户定义的名字空间。下面就是我们使用自定义函数的全部内容:

 <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform  
   xmlns:msxsl="urn:schemas-microsoft-com:xslt"  
   xmlns:user="http://lucky.myrice.com"  
   version="1.0">  
   <msxsl:script language="VBScript" implements-prefix="user">  
   <![CDATA[  
   function getName(node)  
   getName = node.item(0).nodeName  
   end function  
   }>  
   </msxsl:script>
ログイン後にコピー

在我们的XSLT文件中,使用了两个循环,我们分别进行相应的更改,第一处:显示表头的地方改为,它等同于;第二处循环是显示每行记录,改成。还有其他的地方需要更改的,请参见后面的完整源代码部分。这样我们就完成了通用的XSLT文件,不管你的XML数据有多少字段,也不管节点名称是什么,我们都无需更改XSLT文件,就可以实现我们的功能了。最终的浏览效果将会象下图所示:

XML は並べ替え可能でページ分割されたデータ表示ページを作成します

以下是完整的Style.xsl文件的内容:

  
     
     
     
     
    
     
   <xsl:apply-templates select="/*"/>  
     
    
     
   
页 总 页 共有 条记录 每页记录数:
Sort('''')
以下是进行输出的Exam.htm文件:

客户关系表

<客户关系表 xmlns:dt="urn:schemas-microsoft-com:datatypes"> <客户><序号 dt:dt="int">01<姓名>Mi<电子邮件>water@21cn.com <客户><序号 dt:dt="int">02<姓名>uyi<电子邮件>Lily@sina.com <客户><序号 dt:dt="int">03<姓名>uiyu<电子邮件>John@21cn.com <客户><序号 dt:dt="int">04<姓名>Doug<电子邮件>Karry@163.net <客户><序号 dt:dt="int">05<姓名>Ellen<电子邮件>vivki@sina.com <客户><序号 dt:dt="int">06<姓名>Frank<电子邮件>net_lover@mengxianhui.com.cn <客户><序号 dt:dt="int">07<姓名>Greg<电子邮件>meng@mengxianhui.com <客户><序号 dt:dt="int">08<姓名>Harry<电子邮件>sunny@xianhui.net <客户><序号 dt:dt="int">09<姓名>Ingrid<电子邮件>cathy@hotmail.com <客户><序号 dt:dt="int">10<姓名>Jeff<电子邮件>your@mxh.com <客户><序号 dt:dt="int">11<姓名>Kelly<电子邮件>Iloveyou@mengxianhui.com <客户><序号 dt:dt="int">12<姓名>Larry<电子邮件>smilling@mengxianhui.com <客户><序号 dt:dt="int">13<姓名>Mark<电子邮件>money@21cn.com <客户><序号 dt:dt="int">14<姓名>Nancy<电子邮件>www@yahoo.com <客户><序号 dt:dt="int">15<姓名>Peter<电子邮件>dotnet@aol.com <客户><序号 dt:dt="int">16<姓名>Rachel<电子邮件>billgates@microsoft.com <客户><序号 dt:dt="int">17<姓名>Seth<电子邮件>flying@yous.net <客户><序号 dt:dt="int">18<姓名>Tim<电子邮件>agooyboy@lovegirl.com <XML id=&#39;&#39;Style&#39;&#39; src=&#39;&#39;Style.xsl&#39;&#39;></XML> <div id="DisplayArea"></div>
资料来源:【孟宪会之精彩世界
ログイン後にコピー

   把上面的内容拷贝到本地计算机上,分别保存为相应的文件,在IE5+和XML3.0+的环境下即可看到效果! 

 以上就是XML创建可排序、分页的数据显示页面的内容,更多相关内容请关注PHP中文网(www.php.cn)!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PowerPoint を使用して XML ファイルを開くことはできますか? PowerPoint を使用して XML ファイルを開くことはできますか? Feb 19, 2024 pm 09:06 PM

XML ファイルは PPT で開くことができますか? XML、Extensible Markup Language (Extensible Markup Language) は、データ交換とデータ ストレージで広く使用されている汎用マークアップ言語です。 HTML と比較して、XML はより柔軟であり、独自のタグとデータ構造を定義できるため、データの保存と交換がより便利で統一されます。 PPT (PowerPoint) は、プレゼンテーションを作成するために Microsoft によって開発されたソフトウェアです。包括的な方法を提供します。

Python を使用した XML データのマージと重複排除 Python を使用した XML データのマージと重複排除 Aug 07, 2023 am 11:33 AM

Python を使用した XML データのマージと重複排除 XML (eXtensibleMarkupLanguage) は、データの保存と送信に使用されるマークアップ言語です。 XML データを処理するとき、複数の XML ファイルを 1 つにマージしたり、重複データを削除したりする必要がある場合があります。この記事では、Python を使用して XML データのマージと重複排除を実装する方法と、対応するコード例を紹介します。 1. XML データのマージ 複数の XML ファイルがある場合、それらをマージする必要があります。

Python を使用した XML データのフィルタリングと並べ替え Python を使用した XML データのフィルタリングと並べ替え Aug 07, 2023 pm 04:17 PM

Python を使用した XML データのフィルタリングと並べ替えの実装 はじめに: XML は、データをタグと属性の形式で保存する、一般的に使用されるデータ交換形式です。 XML データを処理するとき、多くの場合、データのフィルタリングと並べ替えが必要になります。 Python には、XML データを処理するための便利なツールとライブラリが多数用意されています。この記事では、Python を使用して XML データをフィルタリングおよび並べ替える方法を紹介します。 XML ファイルの読み取り 始める前に、XML ファイルを読み取る必要があります。 Python には XML 処理ライブラリが多数ありますが、

Python で XML データを CSV 形式に変換する Python で XML データを CSV 形式に変換する Aug 11, 2023 pm 07:41 PM

Python の XML データを CSV 形式に変換する XML (ExtensibleMarkupLanguage) は、データの保存と送信に一般的に使用される拡張可能なマークアップ言語です。 CSV (CommaSeparatedValues) は、データのインポートとエクスポートに一般的に使用されるカンマ区切りのテキスト ファイル形式です。データを処理するとき、分析や処理を容易にするために、XML データを CSV 形式に変換する必要がある場合があります。 Pythonは強力です

PHP を使用して XML データをデータベースにインポートする PHP を使用して XML データをデータベースにインポートする Aug 07, 2023 am 09:58 AM

PHP を使用した XML データのデータベースへのインポート はじめに: 開発中、さらなる処理や分析のために外部データをデータベースにインポートする必要がよくあります。一般的に使用されるデータ交換形式として、XML は構造化データの保存と送信によく使用されます。この記事では、PHP を使用して XML データをデータベースにインポートする方法を紹介します。ステップ 1: XML ファイルを解析する まず、XML ファイルを解析し、必要なデータを抽出する必要があります。 PHP には XML を解析するためのいくつかの方法が用意されており、最も一般的に使用されるのは Simple を使用する方法です。

Python は XML と JSON 間の変換を実装します Python は XML と JSON 間の変換を実装します Aug 07, 2023 pm 07:10 PM

Python は XML と JSON 間の変換を実装します はじめに: 日常の開発プロセスでは、異なる形式間でデータを変換する必要があることがよくあります。 XML と JSON は一般的なデータ交換形式であり、Python ではさまざまなライブラリを使用して XML と JSON の間で変換できます。この記事では、一般的に使用されるいくつかの方法をコード例とともに紹介します。 1. Python で XML を JSON に変換するには、xml.etree.ElementTree モジュールを使用できます。

Python を使用した XML でのエラーと例外の処理 Python を使用した XML でのエラーと例外の処理 Aug 08, 2023 pm 12:25 PM

Python を使用した XML でのエラーと例外の処理 XML は、構造化データの保存と表現に使用される一般的に使用されるデータ形式です。 Python を使用して XML を処理すると、エラーや例外が発生することがあります。この記事では、Python を使用して XML のエラーと例外を処理する方法を紹介し、参考用のサンプル コードをいくつか示します。 Try-Except ステートメントを使用して XML 解析エラーを捕捉する Python を使用して XML を解析すると、時々、次のようなエラーが発生することがあります。

Python は XML 内の特殊文字とエスケープ シーケンスを解析します Python は XML 内の特殊文字とエスケープ シーケンスを解析します Aug 08, 2023 pm 12:46 PM

Python は XML 内の特殊文字とエスケープ シーケンスを解析します XML (eXtensibleMarkupLanguage) は、異なるシステム間でデータを転送および保存するために一般的に使用されるデータ交換形式です。 XML ファイルを処理する場合、特殊文字やエスケープ シーケンスが含まれる状況に遭遇することが多く、これにより解析エラーやデータの誤解が生じる可能性があります。したがって、Python を使用して XML ファイルを解析する場合は、これらの特殊文字とエスケープ シーケンスの処理方法を理解する必要があります。 1. 特殊文字と

See all articles