xml (Extensible Markup Language) は、ある種の w3c 標準のように見えるかもしれません。現時点では実質的な影響はほとんどなく、たとえ後で役立つようになったとしても、それはずっと先のことになります。しかし、実際にはすでに使われているのです。したがって、xml がお気に入りの htmlエディター に追加されるまで待たずに使用を開始してください。今すぐさまざまな問題を解決できます。
sparks.com では、javaオブジェクトから HTML データ表示まで、さまざまなシステム間でのデータ表現を標準化しています
特に、データの共有と操作が容易であることがわかりました。非常に基本的な XML 構造で標準化されている限り、XML を使用する多くの効果的な方法を発見しました。ここでは、現在のアプリケーションについて詳しく説明します。xml を使用する前に、次の XML データ形式を作成します。使用したい情報とは異なります。
動的 XML を生成する
データベースから HTML を生成することは新しいことではありませんが、ここでの XML 生成手順は新しいです。
テンプレート言語として xsl を使用する
xsl (Extensible Stylesheet)。 Language) は、複数の
statictemplate
generate htmlxml として記述するとより効率的です。これは正しくないかもしれません。しかし、ユーザーに表示される HTML ページは、実際には xml と xsl の組み合わせの結果です。
xml の標準化機能は、残念なことに、非常に柔軟であるため、空白に直面することがあります。 どの XML プロジェクトでも、最初のステップは、次の決定を行うことです: どのデータを含めるか dtd ( dom (ドキュメント オブジェクト モデル) を使用するか、sax (xml 用の簡易 API) 解析を使用するか データを決定する: なぜなら、標準の XML 形式はなく、開発者は独自の形式を自由に開発できるからです。あなたの形式が 1 つのアプリケーションでのみ認識される場合、その形式を読み取ることができる他のプログラムが存在する場合にのみ、その形式を使用することができます。ほとんどのシステムはタグを無視し、認識できないため、XML 形式を変更する最も安全な方法は、タグを変更するのではなく、タグを追加することです。 ここをクリックして XML データ形式の例を確認してくださいsparks.com では、すべてのページですべてのデータが使用されているわけではありませんが、さまざまな製品プレゼンテーションのニーズを検討して、適用できる非常に完全な XML データ形式を開発しました。たとえば、製品詳細ページには製品参照ページよりも多くのデータが表示されます。ただし、各ページの xsl テンプレートは必要なフィールドのみを使用するため、どちらの場合でも同じデータ形式が使用されます。 dtd を使用するかどうか sparks.com では、単に正しい xml ではなく、よく整理された xml を使用します。前者は dtd を必要としないからです。 DTD は、ユーザーがクリックしてからページを表示するまでの間に処理レイヤーを追加します。このレイヤーには多大な処理が必要であることがわかりました。もちろん、XML 形式で他の企業と通信するときに DTD を使用するのは依然として良いことです。なぜなら、dtd は送受信時にデータ構造が正しいことを保証できるからです。 解析エンジンを選択してください現在、いくつかの解析エンジンが利用可能です。どちらを選択するかは、ほぼ完全にアプリケーションのニーズによって決まります。 DTD を使用する場合は、解析エンジンが XML を DTD で検証できるようにする必要があります。検証を別のプロセスに入れることもできますが、パフォーマンスに影響を及ぼします。 sax と dom は 2 つの基本的な分析モデルです。 Sax はevents
に基づいているため、XML が解析されるとイベントがエンジンに送信されます。次に、イベントが出力ファイルと同期されます。 DOM 解析エンジンは、動的 XML データと XSL スタイル シートの階層ツリー構造を確立します。 DOM ツリーにランダムにアクセスすることで、あたかも XSL スタイルシートで決定されたかのように XML データを提供できます。 SAX モデルに関する議論は主に、DOM 構造の過剰なメモリ削減と XSL スタイル シートの解析時間の高速化に焦点を当てています。 しかし、sax を使用する多くのシステムがその機能を十分に活用していないことがわかりました。これらのシステムは、これを使用して DOM 構造を構築し、DOM 構造を通じてイベントを送信します。このアプローチでは、XML 処理の前にスタイルシートから DOM を構築する必要があるため、パフォーマンスが低下します。 2. 動的 XML を生成するXML 形式が確立されたら、それをデータベースから動的に移植できるメソッドが必要です。
xml ドキュメントの生成は、文字列を処理できるシステムのみが必要なため、比較的簡単です。 Javaサーブレット、エンタープライズJavabeanサーバー、jdbc、rdbms(リレーショナルデータベース管理システム)を使用してシステムを構築しました。
サーブレットは、XML ドキュメントを生成するタスクをエンタープライズ Javabean (ejb) にオフロードすることにより、製品情報リクエストを処理します。
ejb は jdbc を使用して、データベースから必要な製品の詳細をクエリします。
ejbはxmlファイルを生成し、それをサーブレットに渡します。
サーブレットは解析エンジンを呼び出して、xml ファイルと静的 xsl スタイル シートから html 出力を作成します。 (使用に関する追加情報については、
XML生成プロセスを開始するコードはejbメソッドに配置されます。このインスタンスは、生成された XML 文字列を保存するための文字列バッファをすぐに作成します。
stringbuffer xml = new stringbuffer(); xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request)); xml.append(product.toxml()); xml.append(xmlutils.enddocument("browse"); out.print(xml.tostring());
次の 3 つの xml.append() 変数自体は、他のメソッドへの呼び出しです。
ファイル ヘッダーの生成
最初の追加メソッドは、xmlutils クラスを呼び出して XML ファイル ヘッダーを生成します。 Java サーブレットのコードは次のとおりです:
public static string begindocument(string stylesheet, string page) { stringbuffer xml = new stringbuffer(); xml.append( "<?xml version=\"1.0\"?>\n") .append( "<?xml-stylesheet href=\"") .append(stylesheet).append( "\"") .append( " type =\"text/xsl\"?>\n"); xml.append( "<").append(page).append(">\n"); return xml.tostring(); }
このコードは、XML ファイル ヘッダーを生成します。 タグは、このファイルをバージョン 1.0 をサポートする XML ファイルとして定義します。コードの 2 行目は、データを表示するための正しいスタイル シートの場所を指します。最後に含まれるのは項目レベルのタグ (この例では
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>
製品情報を入力してください
ファイルヘッダーの完成後、コントロールメソッドは Java オブジェクトを呼び出して XML を生成します。この例では、product オブジェクトが呼び出されます。製品オブジェクトは 2 つのメソッドを使用して XML 表現を生成します。最初のメソッド toxml() は、
public string toxml() { stringbuffer xml = new stringbuffer( "<product>\n"); xml.append(internalxml()); xml.append( "</product>\n"); return xml.tostring(); } public string internalxml() { stringbuffer xml = new stringbuffer( "\t") .append(producttype).append( "\n"); xml.append( "\t").append(idvalue.trim()) .append( "\n"); xml.append( "\t").append(idname.trim()) .append( "\n"); xml.append( "\t").append(page.trim()) .append( "\n"); 厖? xml.append( "\t").append(amount).append("\n"); xml.append( "\t").append(vendor).append("\n"); xml.append( "\t\n"); xml.append( "\t").append(pubdesc).append("\n"); xml.append( "\t").append(vendesc).append("\n"; 厖? return xml.tostring(); }
ファイルを閉じます
最後に、xmlutils.enddocument() メソッドが呼び出されます。この呼び出しにより xml タグが閉じられ (この場合)、最終的に構造化 xml ファイルが完成します。制御メソッドからの文字列バッファ全体も文字列に変換され、元の http リクエストを処理したサーブレットに返されます。
3. テンプレート言語として xsl を使用する
HTML 出力を取得するには、生成された XML ファイルを、XML データの表現方法を制御する XSL テンプレートと結合します。私たちの xsl テンプレートは、注意深く構成された xsl タグと
html タグで構成されています。
テンプレートの構築を開始します xsl テンプレートの先頭は、以下のコードのようになります。コードの最初の行は必須であり、このファイルを xsl スタイル シートとして定義します。 xmlns:xsl=
属性 は、このファイル で使用される XML 名前空間を参照し、version= 属性は名前空間のバージョン番号を定義します。ファイルの最後でタグを閉じます。
次に、よく構成された HTML を見てみましょう。 XML 解析エンジンによって処理されるため、適切に構成された XML のすべてのルールに準拠する必要があります。基本的に、これはすべての開始タグに対応する終了タグが必要であることを意味します。たとえば、通常は閉じられない
タグは、
で閉じる必要があります。<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match="basketpage"> <html> <head> <title>shopping bag / adjust quantity</title> </head> <body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000"> <br> <br> </xsl:template> </xsl:stylesheet>
choose
の
if-then-else 構造の先頭に似ています。 XSL では、choose タグは、コードが入る部分で、割り当てによってアクションがトリガーされることを示します。属性が割り当てられた 在这个例子里,when标签会为quantity标签检查xml。如果quantity标签里含有值为真的error属性,quantity标签将会显示列在下面的表格单元。如果属性的值不为真,xsl将会显示otherwise标签间的内容。在下面的实例里,如果error属性不真,则什么都不会被显示。 for-each for-each 循环在程序遇到标签时开始。这个循环将在程序遇到标签时结束。一旦这个循环运行,每次标签出现时都会应用这个模板。 四、生成html 将来的某一时刻,浏览器将会集成xml解析引擎。到那时,你可以直接向浏览器发送xml和xsl文件,而浏览器则根据样式表中列出的规则显示xml数据。不过,在此之前开发者们将不得不在他们服务器端的系统里创建解析功能。 在sparks.com,我们已经在java servlet里集成了一个xml解析器。这个解析器使用一种称为xslt (xsl transformation)的机制,按xsl标签的说明向xsl模板中添加xml数据。 当我们的java servlet处理http请求时,servlet检索动态生成的xml,然后xml被传给解析引擎。根据xml文件中的指令,解析引擎查找适当的xsl样式表。解析器通过dom结构创建html文件,然后这个文件再传送给发出http请求的用户。 如果你选择使用sax模型,解析器会通读xml源程序,为每个xml标签创建一个事件。事件与xml数据对应,并最终按xsl标签向样式表中插入数据。 以上がXMLとXSLを使用して動的ページを生成するコードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<xsl:choose>
<xsl:when test="quantity[@error='true']">
<td bgcolor="#ffffff"><img height="1" width="1" src="http://img.sparks.com/images/i-catalog/sparks_images/sparks_ui/clearpixel.gif"/></td>
<td valign="top" bgcolor="#ffffff" colspan="2">
<font face="verdana, arial" size="1" color="#cc3300"><b>*not enough in stock. your quantity was adjusted accordingly.</b></font></td>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<xsl:for-each select="package">
<xsl:apply-templates select="product"/>
</xsl:for-each>