xmlファイルdelphiを作成する方法。 インターネット旅行ガイド-ウェブ上のすべての楽しみ。 ドキュメントフローの構成について一言
いらっしゃいませ! このブログはインターネットとコンピューターに関するものであり、むしろそれらに捧げられたものです。
おそらく、何年もの間、新しい記事がサイトに登場していないことはすぐに明らかです。 はい、それはほとんどのブログの運命です。 このプロジェクトはかつて野心的な取り組みであり、当時書いた他の多くの人と同様に、著者はロシアの最高のブロガーの1人になるという野心的な計画を立てていました。 さて、今見てみると、私のブログと同時に作成されたブログのほとんどは、すでに永遠に姿を消しています。 そして、私はブログを書くのに十分な時間がありませんでした。 そうです、それはもう更新されていません。 かつてこのサイトで私たちはコンテスト「BlogofRunet2011」に勝ちましたが。
これを全部削除することも考えていたのですが、古い資料を修正して、読者の役に立つことに気づきました。 はい、一部の記事は古くなっています(私が十分な力を持っていれば、適切なメモを受け取ります)が、たとえば、このサイトは初心者に役立ちます-ここであなたはについて読むことができます 基本概念インターネット、インターネット、Windowsの設定方法、さらにはLinuxへの切り替え方法を学びましょう。 したがって、ルーブリックを見て、自分に合ったものを選択してください。
それでも、これが単なるブログではなく、インターネットへの本当のガイドであることを願っています。 サイトはディレクトリモードで表示でき、利用可能なすべての記事がカテゴリ別に構成されています。 そして、誰が知っているか、多分いつか新しい高品質の記事がここに現れ始めるでしょう。
サンダー
Picodi.ruは、貯蓄と安い買い物のポーランドの専門家であるInternationalCouponsの割引ポータルです。 ポーランド人は世界で最も経済的な国の1つと見なされているため、このタイプのプロジェクトがポーランドのスタートアップkodyrabatowe.plから生まれたことは驚くことではありません。 このポータルは、ロシアの通常のインターネットユーザーにとってどのように役立つのでしょうか。
現代のAndroid携帯電話は電話以上のものです。 タイピングに慣れます インストールされたプログラム、あなたの通話の履歴に テキストメッセージ、写真コレクションなど。 しかし、時間が経つと、あなたに合ったデバイスが完全に遅くなったり、グリッチが発生したり、ケースの欠けや画面の傷のために見栄えが悪くなったりします。 新しい電話を選んで変更するという問題が発生します アンドロイド電話..。 そして、今、選択の質問をバイパスする場合、「移動」して 新しい電話深刻な問題が残っています。すべてのデータを最初から始めたくはありません。 これが今日お話しすることです。
このブログの読者のほとんどは、おそらくバージョン管理システムに遭遇したことがなく、近い将来に遭遇することはありません。 それは残念だ。 この非常に便利な発明は、プログラマーによって広く使用されていますが、私の意見では、テキストを積極的に扱う人にとっては非常に役立つ可能性があります。 しかし、おそらく今では、「オフィス」に使い始めるのが簡単な単一のバージョン管理システムはありません( マイクロソフトオフィス) 仕事。 それでも、この記事で紹介されている資料は、すべての読者にとって興味深いものになると思います。
あなたがあなたのテレビからネットワーク上で映画を見てそしてオンラインになる方法について考えたなら、この記事はあなたのためです。 いいえ、一部のテレビにはすでにスマートテレビ機能が搭載されていることは知っていますが、正しく機能するのを見たことがありません。 どうやら、したがって、最近、グーグル社は絶対に素晴らしいデバイスを示し、それはすぐにセンセーションを巻き起こしました。 昨年の悲惨なNexusQのより高度で手頃なバージョンであるChromecastメディアストリーマー(Chromecast)について話しています。
サイズが2インチ以下のドングルChromecastをポートに接続します HDMIテレビストリーミングWebコンテンツの視聴を楽しむことができます。 ストリーマーを制御するには、iOS、Windows、Android、またはMac OSのオペレーティングプラットフォームに基づく任意のデバイス(タブレット、PC、スマートフォン)を使用できます。
この記事では、Androidシステムメモリのデバイス、その不足が原因で発生する可能性のある問題、およびそれらの解決方法について説明します。 少し前まで、私自身、Androidスマートフォンが、アプリケーションをインストールしようとしたときに、メモリ不足に関するメッセージを定期的に送信し始めたという事実に直面していました。 市場の説明によると約16GBあるはずだったので、これは私にとって非常に奇妙でした。また、メモリカードを追加してこのボリュームを増やしました。 しかし、問題があり、見つける前にたくさんいじくり回さなければなりませんでした 正しい決断ルートアクセスや電話の完全な工場出荷時の復元は必要ありません。
XMLは、情報を格納し、アプリケーションとWebサイト間で情報を交換するためにますます使用されています。 多くのアプリケーションはこの言語をデータを格納するための基本言語として使用しますが、他のアプリケーションはXMLデータのエクスポートとインポートに使用します。 それで、開発者はXMLデータを自分のアプリケーションでどのように使用できるかを考え始める時が来ました。
この記事では、XMLドキュメントオブジェクトモデル(DOM)とMicrosoftによるXMLDOMの実装について説明します。
XML DOMは、XMLファイルをロードおよび処理するためのオブジェクトを開発者に提供するオブジェクトモデルです。 オブジェクトモデルは、XMLDOMDocument、XMLDOMNodeList、XMLDOMNode、XMLDOMNamedNodeMap、およびXMLDOMParseErrorのコアオブジェクトで構成されています。 これらの各オブジェクト(XMLDOMParseErrorを除く)には、オブジェクトに関する情報の取得、オブジェクトの値と構造の操作、およびXMLドキュメントの構造のナビゲートを可能にするプロパティとメソッドが含まれています。
主なXMLDOMオブジェクトを見て、BorlandDelphiでの使用例をいくつか示しましょう。
BorlandDelphiでのXMLDOMの使用
DelphiアプリケーションでMicrosoftXML DOMを使用するには、適切なタイプライブラリをプロジェクトに接続する必要があります。 これを行うには、コマンドProject | タイプライブラリのインポートおよび[タイプライブラリのインポート]ダイアログボックスで、Microsoft XMLバージョン2.0(バージョン2.0)ライブラリを選択します。これは通常、Windows \ System \ MSXML.DLLファイルにあります。
[ユニットの作成]ボタンをクリックすると、MSXML_TLBインターフェイスモジュールが作成されます。これにより、MSXML.DLLライブラリに実装されているXML DOMオブジェクト(DOMDocument、XMLDocument、XMLHTTPRequestなど)を使用できるようになります。 MSXML_TLBモジュールへの参照は、[用途]リストに含まれている必要があります。
XMLDOMデバイス
ドキュメントオブジェクトモデルは、ブランチのツリー構造でXMLドキュメントを表します。 XML DOM APIを使用すると、アプリケーションはドキュメントツリーをナビゲートし、そのブランチを操作できます。 各ブランチは特定のタイプ(DOMNodeType)を持つことができ、それに応じて親ブランチと子ブランチが決定されます。 ほとんどのXMLドキュメントには、要素、属性、およびテキスト型のブランチが含まれています。 属性は特別な種類のブランチであり、子ブランチではありません。 XML DOMオブジェクトによって提供される特別なメソッドは、属性を操作するために使用されます。
World Wide Webコンソーシアム(W3C)が推奨するインターフェイスの実装に加えて、Microsoft XML DOMには、XSL、XSLパターン、名前空間、およびデータ型をサポートするメソッドが含まれています。 たとえば、SelectNodesメソッドを使用すると、XSLパターン構文を使用して特定のコンテキストでブランチを検索でき、TransformNodeメソッドはXSLを使用して変換を実行することをサポートします。
XMLドキュメントをテストする
XMLドキュメントの例として、次の構造を持つ音楽CD-ROMディレクトリを取り上げます。
これで、XMLDOMDocumentオブジェクトから始めて、XMLDOMオブジェクトモデルの調査を開始する準備が整いました。
XMLドキュメント-XMLDOMDocumentオブジェクト
XMLドキュメントの操作は、それをロードすることから始まります。 これを行うには、Loadメソッドを使用します。このメソッドには、ロードされたドキュメントのURLを指定するパラメーターが1つだけあります。 ローカルディスクからファイルをロードする場合、完全なファイル名のみが指定されます(この場合、ファイル:///プロトコルは省略できます)。 XMLドキュメントが文字列として保存されている場合は、LoadXMLメソッドを使用してドキュメントをロードします。
Asyncプロパティは、ドキュメントのロード方法(同期または非同期)を制御するために使用されます。 デフォルトでは、このプロパティはTrueに設定されています。これは、ドキュメントが非同期で読み込まれ、ドキュメントが完全に読み込まれる前に制御がアプリケーションに返されることを示します。 それ以外の場合は、ドキュメントが同期的に読み込まれるため、ReadyStateプロパティの値をチェックして、ドキュメントが読み込まれたかどうかを確認する必要があります。 ReadyStateプロパティの値が変更されたときに制御を取得するOnReadyStateChangeイベントのハンドラーを作成することもできます。
次に、Loadメソッドを使用してXMLドキュメントをロードする方法を示します。
使用... MSXML_TLB ...プロシージャTForm1.Button1Click(送信者:TObject); var XMLDoc:IXMLDOMDocument; XMLDocを開始します:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load( ‘C:\ DATA \ DATA.xml’); ////これはXMLドキュメントとそのブランチを操作するコード//ここです// XMLDoc:= Nil; 終わり;
ドキュメントが読み込まれた後、そのプロパティにアクセスできます。 したがって、NodeNameプロパティには#document値が含まれ、NodeTypeStringプロパティにはdocument値が含まれ、URLプロパティにはファイルが含まれます:/// C:/DATA/DATA.xml値。
エラー処理
特に興味深いのは、ロード時のドキュメント処理に関連するプロパティです。 たとえば、ParseErrorプロパティは、ドキュメントの処理中に発生したエラーに関する情報を含むXMLDOMParseErrorオブジェクトを返します。
エラーハンドラーを作成するには、次のコードを追加します。
Var XMLError:IXMLDOMParseError; ... XMLDoc.Load( ‘C:\ DATA \ DATA.xml’); XMLError:= XMLDoc.ParseError; XMLError.ErrorCodeの場合<>0 Then ////ここでエラーを処理します// Else Memo1.Lines.Add(XMLDoc.XML); ... XMLDoc:= Nil;
エラーが発生した場合に返される情報を確認するには、次のディレクトリエントリを変更します。
終了要素の削除
次に、XMLDOMParseErrorオブジェクトのプロパティ値を返すコードを記述しましょう。
XMLError:= XMLDoc.ParseError; XMLError.ErrorCodeの場合<>0次に、XMLErrorを使用すると、Memo1.LinesはAdd( ‘File:’ + URL);を開始します。 追加(「コード:」+ IntToStr(ErrorCode)); 追加(「エラー:」+理由); 追加(「テキスト:」+ SrcText); Add( ‘Line:’ + IntToStr(Line)); 追加(「位置:」+ IntToStr(LinePos)); Else Memo1.Lines.Add(XMLDoc.XML);を終了します。 終わり;
アプリケーションを実行します。 その結果、エラーに関する次の情報が得られます。
上記の例からわかるように、XMLDOMParseErrorオブジェクトによって返される情報は、エラーをローカライズし、その発生の原因を理解するのに十分です。
次に、終了要素を復元します
ドキュメントツリーへのアクセス
ドキュメントツリーにアクセスするには、ルート要素を取得してからその子ブランチを反復処理するか、特定のブランチを見つけることができます。 最初のケースでは、XMLDOMNode型のオブジェクトを返すDocumentElementプロパティを介してルート要素を取得します。 DocumentElementプロパティを使用して、各子要素のコンテンツを取得する方法は次のとおりです。
変数ノード:IXMLDOMNode; ルート:IXMLDOMElement; I:整数; ...ルート:= XMLDoc.DocumentElement; Iの場合:= 0からRoot.ChildNodes.Length-1はノードの開始を行います:= Root.ChildNodes.Item [I]; Memo1.Lines.Add(Node.Text); 終わり;
XMLドキュメントの場合、次のテキストが表示されます。
特定のブランチまたは最初の子ブランチの下のブランチに関心がある場合は、XMLDOMDocumentオブジェクトのNodeFromIDメソッドまたはGetElementByTagNameメソッドのいずれかを使用できます。
NodeFromIDメソッドには、XMLスキーマまたはドキュメントタイプ定義(DTD)で定義されている一意の識別子が必要であり、その識別子を持つブランチを返します。
GetElementByTagNameメソッドは、特定の要素(タグ)を持つ文字列を必要とし、この要素を持つすべてのブランチを返します。 この方法を使用して、CD-ROMディレクトリ内のすべてのアーティストを検索する方法は次のとおりです。
ノード:IXMLDOMNodeList; ノード:IXMLDOMNode; ...ノード:= XMLDoc.GetElementsByTagName( ‘ARTIST’); Iの場合:= 0 to Nodes.Length-1 do Begin Node:= Nodes.Item [I]; Memo1.Lines.Add(Node.Text); 終わり;
XMLドキュメントの場合、次のテキストが表示されます
XMLDOMNodeオブジェクトのSelectNodesメソッドは、ドキュメントブランチにアクセスするためのより柔軟な方法を提供することに注意してください。 しかし、それについては以下で詳しく説明します。
ドキュメントブランチ-XMLDOMNodeオブジェクト
XMLDOMNodeオブジェクトは、ドキュメントブランチを表します。 ドキュメントのルート要素を取得したときに、このオブジェクトに既に遭遇しました。
ルート:= XMLDoc.DocumentElement;
XMLドキュメントのブランチに関する情報を取得するには、XMLDOMNodeオブジェクトのプロパティを使用できます(表1)。
ブランチに格納されているデータにアクセスするには、NodeValueプロパティ(属性、テキストブランチ、コメント、処理手順、およびCDATAセクションで使用可能)またはブランチのテキストコンテンツを返すTextプロパティのいずれかを使用するのが一般的です。またはNodeTypedValueプロパティ。 ただし、後者は、タイプされたアイテムを持つブランチにのみ使用できます。
ドキュメントツリーのナビゲート
XMLDOMNodeオブジェクトは、ドキュメントツリーをナビゲートするための多くの方法を提供します。 たとえば、親ブランチにアクセスするには、ParentNodeプロパティ(タイプXMLDOMNode)を使用し、ChildNodesプロパティ(タイプXMLDOMNodeList)、FirstChildおよびLastChild(タイプXMLDOMNode)などを介して子ブランチにアクセスします。 OwnerDocumentプロパティは、XMLドキュメント自体を識別するXMLDOMDocumentオブジェクトを返します。 上記のプロパティを使用すると、ドキュメントツリーを簡単にナビゲートできます。
次に、XMLドキュメントのすべてのブランチをループしてみましょう。
ルート:= XMLDoc.DocumentElement; Iの場合:= 0からRoot.ChildNodes.Length-1はノードの開始を行います:= Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds(Node、0); 終わり;
上記のように、XMLDOMNodeオブジェクトのSelectNodesは、ドキュメントブランチにアクセスするためのより柔軟な方法を提供します。 さらに、ドキュメントの最初のブランチのみを返すSelectSingleNodeメソッドがあります。 これらの方法はどちらも、ブランチ検索用のXSLテンプレートを定義できます。
SelectNodesメソッドを使用して、CDブランチとPRICEサブブランチを持つすべてのブランチをフェッチするプロセスを見てみましょう。
ルート:= XMLDoc.DocumentElement; ノード:= Root.SelectNodes( ‘CD / PRICE’);
CDブランチのすべてのPRICEサブブランチは、Nodesコレクションに配置されます。 少し後でXSLテンプレートの説明に戻ります。
子ブランチの操作
子ブランチを操作するには、XMLDOMNodeオブジェクトのメソッドを使用できます(表2)。
最初のディスクに関するレコードを完全に削除するには、次のコードを実行する必要があります。
Var XMLDoc:IXMLDOMDocument; ルート:IXMLDOMNode; ノード:IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load( ‘C:\ DATA \ DATA.xml’); //ルート要素を取得しますRoot:= XMLDoc.DocumentElement; ノード:=ルート; //最初の子ブランチを削除しますNode.RemoveChild(Node.FirstChild);
この例では、最初の子ブランチを削除していることに注意してください。 最初の子ブランチの最初の要素を削除する方法を以下に示します。
Var XMLDoc:IXMLDOMDocument; ルート:IXMLDOMNode; ノード:IXMLDOMNode; XMLDoc:= CoDOMDocument.Create; XMLDoc.Async:= False; XMLDoc.Load( ‘C:\ DATA \ DATA.xml’); //ルート要素を取得しますRoot:= XMLDoc.DocumentElement; //および最初の子ブランチNode:= Root.FirstChild; //最初の子ブランチを削除しますNode.RemoveChild(Node.FirstChild);
上記の例では、最初のブランチではなく削除しました
次に、新しいブランチを追加しましょう。 以下は、新しい音楽CD-ROMエントリを追加する方法を示すコードです。
Var NewNode:IXMLDOMNode; 子:IXMLDOMNode; ... //新しいブランチを作成します-
上記のコードは、新しいブランチを追加するための次の一連の手順を示しています。
- CreateNodeメソッドを使用して新しいブランチを作成します。
- CreateNodeメソッドを使用して要素を作成します。
- AppendChildメソッドを使用してブランチに要素を追加します。
- Textプロパティを介して要素の値を設定します。
- …すべての要素に対して繰り返します。
- AppendChildメソッドを使用してドキュメントに新しいブランチを追加します。
AppendChildメソッドがツリーの最後にブランチを追加することを思い出してください。 ツリーの特定の場所にブランチを追加するには、InsertBeforeメソッドを使用する必要があります。
ブランチセット-XMLDOMNodeListオブジェクト
XMLNodeListオブジェクトには、SelectNodesまたはGetElementsByTagNameメソッドを使用して構築でき、ChildNodesプロパティから取得できるブランチのリストが含まれています。
このオブジェクトの使用については、「ドキュメントツリーのナビゲート」のセクションで提供されている例ですでに説明しました。 ここでは、いくつかの理論的なコメントを提供します。
リスト内のブランチの数は、Lengthプロパティの値として取得できます。 ブランチには0からLength-1までのインデックスが付けられ、個々のブランチには、Item配列内の対応するインデックス付きアイテムからアクセスできます。
ブランチのリスト内を移動するには、リスト内の次のブランチを返すNextNodeメソッドを使用するか、現在のブランチが最後の場合はNilを使用することもできます。 リストの先頭に戻るには、Resetメソッドを呼び出します。
ドキュメントを作成して保存する
そこで、既存のXMLドキュメントにブランチと要素を追加する方法について説明しました。 それでは、その場でXMLドキュメントを作成しましょう。 まず、ドキュメントはURLからだけでなく、通常の文字列からもロードできることを忘れないでください。 ルート要素を作成する方法は次のとおりです。ルート要素を使用して、残りの要素を動的に構築できます(子ブランチの操作のセクションですでに説明しました)。
Var XMLDoc:IXMLDOMDocument; ルート:IXMLDOMNode; ノード:IXMLDOMNode; S:WideString; ... S:= ‘
XMLドキュメントを作成したら、Saveメソッドを使用してファイルに保存します。 例えば:
XMLDoc.Save( 'C:\ DATA \ NEWCD.XML');
Saveメソッドを使用すると、ファイルへの保存に加えて、XMLドキュメントを新しいXMLDOMDocumentオブジェクトに保存できます。 この場合、ドキュメントは完全に処理され、その結果、その構造と構文がチェックされます。 ドキュメントを別のオブジェクトに保存する方法は次のとおりです。
プロシージャTForm1.Button2Click(送信者:TObject); var XMLDoc2:IXMLDOMDocument; XMLDoc2を開始します:= CoDOMDocument.Create; XMLDoc.Save(XMLDoc2); Memo2.Lines.Add(XMLDoc2.XML); ... XMLDoc2:= Nil; 終わり;
結論として、Saveメソッドを使用すると、XMLドキュメントをIStream、IPersistStream、またはIPersistStreamInitインターフェイスをサポートする他のCOMオブジェクトに保存することもできます。
XSLテンプレートの使用
XMLDOMNodeオブジェクトのSelectNodesメソッドについて説明するときに、ドキュメントブランチにアクセスするためのより柔軟な方法を提供することを説明しました。 柔軟性は、ブランチを選択するための基準としてXSLテンプレートを指定できることです。 このようなテンプレートは、XMLドキュメント内の情報を検索するための強力なメカニズムを提供します。 たとえば、ディレクトリ内のすべての音楽CD-ROMタイトルのリストを取得するには、次のクエリを実行できます。
米国でリリースされているアーティストのディスクを確認するために、リクエストは次のように作成されます。
ノード:= Root.SelectNodes( ‘CD / ARTIST’);
ディレクトリ内の最初のドライブを見つける方法は次のとおりです。
ノード:= Root.SelectNodes( ‘CD / TITLE’);
そして最後:
ノード:= Root.SelectNodes( ‘CD / TITLE’);
Bob Dylanのディスクを見つけるには、次のクエリを実行できます。
ノード:= Root.SelectNodes( ‘CD [$ any $ ARTIST =” Bob Dylan”] / TITLE’);
1985年以降に作成されたディスクのリストを取得するには、次のクエリを実行します。
ノード:= Root.SelectNodes( ‘CD / TITLE’);
XSL構文の詳細については、別の出版物が必要です。 読者の興味をそそり、さらなる研究を奨励するために、XSLの可能な使用法のほんの一例を紹介します。 カタログを通常のHTMLテーブルに変換する必要があるとしましょう。 従来の方法を使用して、ツリーのすべてのブランチを反復処理し、受け取った要素ごとに対応するタグを形成する必要があります
XSLを使用して、何をどのように変換するかを指定するテンプレート(またはスタイルシート)を作成するだけです。 次に、このテンプレートをカタログにオーバーレイします。これで完了です。カタログをテーブルに変換するXSLテンプレートのテキストがあります(リスト2)。
XSLテンプレートをディレクトリにオーバーレイするコードは次のようになります。
プロシージャTForm1.Button2Click(送信者:TObject); var XSLDoc:IXMLDOMDocument; XSLDocを開始します:= CoDOMDocument.Create; XSLDoc.Load( ‘C:\ DATA \ DATA.xsl’); Memo2.Text:= XMLDoc.TransformNode(XSLDoc); XSLDoc:= Nil; 終わり;
XSLについての説明を締めくくると、現在、この言語はさまざまなXMLドキュメント間の変換やドキュメントのフォーマットに積極的に使用されていると言えます。
結論
明らかな理由から、すべてのMicrosoft XML DOMオブジェクトを網羅し、それらの使用例を1つの記事で提供することは不可能です。 ここでは、アプリケーションでXMLDOMを使用する際の基本的な問題に触れました。 テーブル 3は、Microsoft XMLDOMに実装されているすべてのオブジェクトを示しています。
ComputerPress 12 "2000
多くのDelphiプログラマーにとって、設定の保存は使用に関連しています INIプログラム内のファイル。 柔軟性が制限され、プログラムのさらなる拡張が妨げられるため、多かれ少なかれ深刻なプロジェクトでこの方法を使用することは避けてください。 このアプローチは、使いやすさと開発環境に組み込まれたツールの存在により、非常に人気があります。
ただし、構造化 XMLファイル。 それらの利点は、パラメーターの数が固定されていない可能性があることです。 これをよりよく理解するために、特定の例を考えてみましょう。
USearchプログラムでエントリをクリックすると、コンテキストメニューが表示され、アイテムのリストが表示されます。 これらの項目はコマンドであり、設定ファイルからロードされます。 設定が保存されている場合 INIファイルの場合、プログラムは特定の数のコマンド(たとえば、10または50)を保存およびロードできます。より大きな値が必要になるとすぐに、コードを書き直して、それに応じて再コンパイルする必要があります。
を使用してアプローチを適用する XMLファイルの場合、すべてのセクションパラメータを動的にロードできるようになります。 さらに、構成ファイルは、冗長なパラメーター番号付けなしで、より洗練されたものになります。 ただし、操作するための標準ツール XML Delphiには多くの欠点があるため、標準ライブラリを使用することをお勧めします MSXML..。 通常、Windowsファミリのオペレーティングシステムにはデフォルトで含まれています。
接続する MSXML、COMサーバーからインポートして、すべての関数のリストを含むインターフェイスファイルを生成する必要があります。 インターフェイスのインポート方法については多くの詳細な記事が書かれていますが、ファイルをダウンロードすることをお勧めします MSXML2_TLB.PAS使用する準備ができて。 ファイルをダウンロードしたら、プロジェクトの横に配置するか、Delphi環境のlibフォルダーにドロップします。 したがって、作成されたすべてのプログラムがモジュールを使用できるようになります MSXML、使用するMSXML2_TLB行を追加する必要があります。
わかりやすくするために、このライブラリを使用する次の例を検討してください。
プロシージャLoadData; var XMLDoc:DOMDocument; ルート:IXMLDOMElement; XMLDocを開始します:= CoDOMDocument.Create; XMLDoc.Load( "settins.xml"); ルート:= XMLDoc.DocumentElement; ShowMessage(Root.SelectSingleNode( "サイズ/幅")。テキスト); ルート:= nil; XMLDoc:= nil; 終わり;
最初に、DOMDocumentクラスのインスタンスが作成され、次にsettings.xmlファイルの内容がメモリにロードされます。 以来、標準によれば、 XMLファイルにはルートタグが含まれている必要があります(この場合 構成)、関数を使用して取得する必要があります DocumentElement..。 次に、コンテンツがタグの間に表示されます。
ここでは、パラメータとして文字列を受け取るSelectSingleNodeメソッドが適用されます
デルフィの問題解決策を注文する
Delphiは、学生が学習プロセスで最も頻繁に紹介する2番目に重要なプログラミング言語です。 これは、オブジェクト指向プログラミングについての学習の始まりです。 学生の頃、電卓を書くよりも簡単に言語を学ぶ方法はないという結論に達しました。 2つの数値を加算するための基本的な関数を実装しても、それはそれに多くの光を当てます。
CodeGaear、Delphi 7、Lazarusはさまざまなコンパイラであり、作成したコードをマシンに転送して、1つと1つに変換するプログラムです。 これらはすべてプログラムを作成するためのプログラムであり、個別のプログラミング言語ではありません。 これらのコンパイラは、Delphi言語の基礎であるObject Pascalプログラミング言語を使用します。これは、構文は通常のPascalと似ていますが、機能が大幅に異なります。
プログラミング言語の構文は何ですか?
これは、さまざまな演算子を記述するための形式です。 たとえば、Pascalの「for」ループの形式は「forn:= 1 tokdo」などです。
C ++プログラミング言語では、同じループの記述が少し異なります。for(n = 1; n電卓を記述します
これにより、オブジェクトがプログラムコードとどのように相互作用するか、「変数」とは何か、および数学関数がどのように機能するかを理解できます。 とにかく、どんなプログラミングも計算になります。 ゲームは、常に何かを計算し、数値や数値関数を操作するプログラムでもあります。 プログラミングは数学と切り離せません。
Lazarus開発環境を使って書きましょう。 その機能は、たとえばCodeGearほど豊富ではありませんが、無料で利用でき、トレーニングを目的としています。
開発環境を開くと、フォームとツールボックスが表示されます。 これがフォームです。
これがツールボックスです。
最初に行うことは、2つの数値を加算する関数を実装するために必要な3つの要素を追加することです。 必要なのは、3個分の「Tedit」と「TButton」です。 下の図では、パネルに矢印で示されています。 それらを1回クリックしてから、フォームを1回クリックすると、フォームに表示されます。
これらは、入力用のテキストフィールドと通常のボタンです。 ほとんどすべてのWindowsプログラムを使用して、これらの要素に出くわします。 見てください。
次に、これらのラベルをクリーンアップしましょう。 「表示」タブをクリックします。 そして、アイテム「オブジェクトインスペクター」をクリックします。 このようなウィンドウが表示されます。
フォームの「ボタン」要素を1回クリックし、インスペクターウィンドウの「キャプション」値を他の値に変更します。 たとえば、「OK」という単語です。 Enterキーを押します。 要素の名前がどのように変更されたかをフォームで確認できます。
Editでも同じことを行いますが、名前を変更しないだけで、コンテンツなしで作成します。 それらを順番に選択し、インスペクターでテキスト値をクリアします。 Enterキーを押すことを忘れないでください。
結果として、私たちのフォームは次のようになります。
さて、私たちの計算機が機能するためには、私たちのボタンの手順に必要なプログラムコードを書く必要があります。 Button要素を2回クリックして、ソースエディタを開きます。
見る? 手順Button1Click。 これは、ボタンを1回クリックしたときに何が起こるかを決める手順です。 そして、次のことが起こるはずです。プログラムは、3番目の編集の最初の2つのフィールドに入力された数値の合計を表示する必要があります。 コードを書きます。
このような単純な5行のコードを記述する必要があります。 コメントと説明は上の写真で見ることができます。 その後、このボタンを押します。
私たちのプロジェクトはコンパイルされます。 プログラムにコンパイルされます。 最初の2つのフィールドに数値を入力し、ボタンをクリックして、合計の値を取得します。
結論
[ファイル]ボタンをクリックしてから[すべて保存]をクリックし、保存するフォルダを選択すると、デスクトップから起動できる本格的なプログラムが作成されます。 ここで、プログラムが2つの数値を除算し、加算しないように、このコードで何を書き直す必要があるかを自分で理解してみてください。 ヒント:データ型を変更する必要があります。 以下のビデオは同様の例を示していますが、Delphi 7環境では、Lazarusではありません。
最近、e-ビジネスシステムの構築、またはそれらがB2B(企業間)とも呼ばれるように、多くの注目が集まっています。 インターネット技術の調整機関であるWWWコンソーシアムの交換ストリーミングシステムの構築に関する推奨事項を検討する:XML技術とXMLドキュメントの交換のためのシステムの構築に重点が置かれています。
e-ビジネスでXMLを使用する利点は、構造化された情報の明確で視覚的な表示、最新のネットワークプロトコルを使用してリアルタイムのビジネスシステムを作成できるため、B2Bシステムの効率が高く、作成コストが低いことです。
XMLドキュメントの形式での情報の表示の独立性により、e-ビジネスに関与するさまざまな企業が互いに独立してソフトウェアを作成できます。
すべてのシステムで、交換は、原則として、HTTPリクエストを使用して同じスキームに従って構築されます。 SSLは情報セキュリティプロトコルとして使用されます(ただし、これは別のトピックです)。
XMLメッセージを処理するための可能なオプションの1つは、XMLドキュメントを生成または処理するBIN / CGI(ISAPI)アプリケーションまたはCOM(サーバー)コンポーネントを構築することです。
アプリケーションは、POSTモードでHTTP要求を発行するクライアントとして機能します。一方、要求が処理されて応答が発行される側にWEBサーバーがあります。 情報交換はXMLドキュメントを使用します。
最も効率的な実装オプションの1つは、DOMモデルをサポートする既存のXMLパーサーを使用することです。 このようなパーサーは、Win'98またはIE 4.7以降(Win'95の場合)の不可欠な部分の配布パッケージであり、msxml.dllライブラリにあるCOMサーバーを表します。
コンポーネントオブジェクトモデル(COM)-カプセル化されたデータとメソッドを単一のエンティティに表し、インターフェイスのシステムを介してそれらにアクセスする方法を示します。 Delphiツールを使用すると、COMオブジェクトのクラスに簡単にアクセスできます(1つのCOMサーバーに複数のクラスを含めることができます)。 オブジェクトには、インターフェイスシステムを介してクラスのインスタンスを初期化することによってアクセスされます。 インターフェイスの記述は、環境によって自動的に実行できるインターフェイス定義言語(IDL)によって実行されます。
DelphiツールはCOMサーバーからインポートするために使用されます msxml.dll、IDLインターフェイスの説明用のファイルとライブラリタイプのバイナリ説明用のファイル-TLBが作成されます。 この操作は、システムメニューから実行されます。 プロジェクト| タイプライブラリのインポート:(写真1)。 次に、ダイアログボックスが表示され(図2)、COMオブジェクト(この場合、オブジェクトは「Microsoft.XMLDom(バージョン2.0)」という名前で登録されています)を選択し、TLBファイルを作成する必要があります(ボタン ユニットを作成する)。 TLBファイルを使用して、フレームワークは「Pascal」COMサーバー記述ファイル(MSXML_TLB.pas)を生成します。
MSXML_TLB.pasファイルには、COMサーバーのすべてのインターフェイス、定数、およびコクラスが記述されています。
COM要素のオブジェクトにアクセスするには、ディレクティブで必要です 使用法ライブラリ記述ファイル(MSXML_TLB.pas)の名前を追加します。 以下は、標準のDOMパーサーmsxml.dllを使用する単純なプログラムです。このプログラムは、XMLドキュメントをロードし、それをMemo1テキストフィールド要素に表示します。
使用 Windows、メッセージ、SysUtils、クラス、グラフィックス、コントロール、フォーム、ダイアログ、OleServer、MSXML_TLB、StdCtrls; タイプ TForm1 = クラス(TForm)Button1:TButton; メモ1:TMemo; 手順 Button1Click(送信者:TObject); 終わり; var Form1:TForm1; 実装($ R * .DFM) 手順 TForm1.Button1Click(送信者:Tobject); // DOMDocumentオブジェクトのsoclassの宣言; var coDoc:CoDOMDocument; // IDOMDocumentインターフェイスと整合性のあるクラス。 var Doc:IXMLDOMDocument; 始める // DOMDocumentオブジェクトのインスタンスを作成します; Doc:= coDoc.Create; // DOMDocumentオブジェクトのインスタンスのLoadメソッドを呼び出します。 Doc.load( "data.xml"); // DOMDocumentインスタンスのxmlプロパティにアクセスします。 Memo1.Text:= Doc.xml; 終わり; 終わり。DOMの概念-ドキュメントオブジェクトモデル
各XMLドキュメントは、複数のオブジェクト(クラス)のセットとして表され、個々の要素(オブジェクトフィールド)にアクセスできます。 DOM-インターフェイスは、DOMStringまたはCharacterDataタイプの単純なオブジェクトと、XMLドキュメントのパーツまたは個々の要素(DOMFragmentElement、DOMNode、DOMElement)の両方へのアクセスを記述します。
以下は、XMLDOMDocument、XMLDOMNode、XMLDOMNodeListオブジェクトの最も重要なプロパティとメソッドです。 以下に示すDOMオブジェクト(ドキュメントオブジェクトモデル)のメソッドと関数は、Microsoft XMLパーサーmsxml.dllによって使用され、W3Cコンソーシアムによって承認されたDOMモデルよりもいくらか広いことに注意してください。
DOMオブジェクトインターフェイスのより完全な説明は、次の場所にあります。
XMLDOMDocumentオブジェクト | |
オブジェクト階層の最上位を表し、ドキュメントを操作するためのメソッド(ドキュメントの読み込み、分析、要素、属性、コメントの作成など)が含まれています。 ..。 | |
プロパティ | |
非同期 | 現在の処理モードを識別するプロパティ |
パースエラー | XMLDOMParseErrorエラー処理オブジェクトへの参照を返します |
有効-ドキュメントの検証を無効にします。 | |
url | ドキュメントのURLを返します |
documentElement | XMLDOMElementオブジェクトとしてドキュメントのルート要素への参照が含まれています。 |
メソッド | |
ロード(url) loadXML(xmlString) |
XMLドキュメントをロードします。 |
保存(objTarget) | XMLドキュメントをファイルに保存します |
アボート | ドキュメントのロードと処理のプロセスの中断。 |
createAttribute(名前) | 現在の要素に指定された名前で新しい属性を作成します。 |
createNode(タイプ、名前、nameSpaceURI) | 指定されたタイプと名前のノードを作成します |
createElement(tagName) | 指定された名前でドキュメント要素を作成します。 |
createTextNode(データ) | ドキュメント内にテキストを作成します |
getElementsByTagName(タグ名) | 指定された名前のドキュメント要素のコレクションへの参照を返します |
nodeFromID(idString) | IDで要素を検索 |
XMLDOMNodeオブジェクト | |
基盤となるDOMインターフェースを実装するXMLDOMNodeオブジェクト ノードは、ドキュメントツリーの別のノードで操作することを目的としています。 そのプロパティとメソッドを使用すると、現在のノードに関する完全な情報(タイプ、名前、フルネーム、コンテンツ、子要素のリストなど)を取得および変更できます。 | |
プロパティ | |
nodeName、baseName | 現在のノードの名前を返します。 |
プレフィックス | 名前空間プレフィックスを返します。 |
データ・タイプ | 現在のノードのコンテンツタイプを指定します |
nodeType、nodeTypeString | 現在のノードのタイプを返します。 |
属性 | 現在のノードの属性のリストをXMLDOMNamedNodeMapコレクションとして取得します。 |
文章 | 現在のサブツリーの内容をテキストとして返します |
xml | 現在のサブツリーのXML表現を返します。 |
nodeValue | 現在のノードの内容を返します。 |
childNodes | 子要素のリストをXMLDOMNodeListとして返します。 |
firstChild、lastChild | 最初/最後の子を返します |
previousSibling、nextSibling | 前/次の兄弟を返します。 |
parentNode | 親要素へのリンクが含まれています。 |
ownerDocument | 現在のノードを含むドキュメントへのポインタを返します。 |
メソッド | |
appendChild(newChild) | 現在のノードに新しい子を追加します。 |
insertBefore(newChild、refChild) | 子ノードを挿入し、refChildで指定されたノードの左側の現在のサブツリーに配置します。 |
cloneNode(ディープ) | 現在のアイテムのコピーを作成します。 |
getAttribute(名前) getAttributeNode(名前) setAttribute(name、value) setAttributeNode(XMLDOMAttribute) |
オブジェクトの属性(作成、読み取り、書き込み)へのアクセス。 Nameは属性の名前であり、valueはその値です。 XMLDOMAttributeオブジェクトの値を返します。 |
replaceChild(newChild、oldChild)removeChild(oldChild) | 現在の子オブジェクトのリストのoldChildオブジェクトをnewChildに置き換えます。 oldChildオブジェクトを削除しています |
selectNodes(patternString)selectSingleNode(patternString) | 検索パターンまたは最初のノードによって選択されたXMLDOMNodeListオブジェクトを返します |
transformNode(スタイルシート) transformNodeToObject(スタイルシート、outputObject) |
現在のノードのサブツリーにスタイルシートを割り当て、処理の結果である文字列を返します。 このパラメーターは、XSLステートメントを含むDOMDocumentオブジェクトへの参照です。 |
ビジネスでのXMLの使用。
より明確な画像を得るには、説明が必要であり、それがどのように機能するかを理解するためにこれらすべてが必要な理由は次のとおりです。
B2Bまたは企業のERPシステムを構築する場合、企業間またはpr-Iのブランチ間でXMLドキュメントの情報交換を整理する場合、HTTPプロトコルを介した既存のWEBサーバーに基づく効率的に実証された情報転送システムが使用されます。
アプリケーションは、POSTモードでHTTP要求を発行するクライアントとして機能します。一方、要求が処理されて応答が発行されるWEBサーバーがあります。 XMLドキュメントは交換として使用されます。
たとえば、単純な企業ERPシステムである会計プログラム(ACSアカウンティング)では、請求書の要求を生成して、倉庫のある支店(ACS倉庫)に送信する必要があります。 AWP B2Bシステムを作成するとき、エンタープライズAがサプライヤBに製品の入手可能性を要求する(購入を注文する)ときの同様の問題ステートメント。
エンタープライズAとそのプログラムはクライアントとして機能します。 倉庫は、SQLサーバー上のデータベースを備えた倉庫複合施設を持っているサプライヤーBによって提供されます。 交換は、サプライヤーVの企業WEBサーバーを介して実行されます。
以下は、次の典型的な交換アルゴリズムです。
図3。
- エンタープライズA開始します プロセスA(製品注文)、WEBクライアントとして機能します。
- プロセスA XMLドキュメント(たとえば、請求書要求)を生成し、それをPOST http要求としてプロバイダーBのWEBサーバーに送信します。処理アプリケーションのリソースIDは、URIとして使用されます。 URIは、すべてのタイプのドキュメントで同じにすることも、タイプごとに個別にすることもできます。 それはすべて、B2B(WEB)サーバーの構造に依存します。
- WEBサーバーはリクエストを分析してサーバーを生成します プロセスB XMLドキュメントの本文をパラメータとして渡す。
プロセスBはWEBサーバーによって起動され、ASPページ、CGI(ISAPI)-アプリケーション、またはJAVAサーバー(サーバーアプリケーション)のいずれかとして処理されます。 - プロセスB-SQLデータベースサーバーへの要求を生成します。
- SQLサーバーはデータベースで必要な操作を実行し、応答を生成して返します プロセスB.
- SQLサーバーからの応答によると プロセスB XMLドキュメント(応答)を生成し、それをクライアントアプリケーションへのhttp要求への応答として返します。
- さらに、クライアント側の状況に応じて、新しいhttpリクエストが形成されるか、セッションが終了します。
ドキュメントフローの構成について簡単に説明します。
XMLドキュメントを交換するためのシステムを開発するための一般的なルールは次のとおりです。
- まず、-電子文書とその構造のフローチャートの作成。
- 第二に-プロセス機能(サブプロセス)のテーブルの開発、すなわち 各プロセスが実装するXMLドキュメントに関する機能。
HTMLドキュメントと同様に、各XMLドキュメントは、メッセージヘッダー(タグで囲まれた情報)とメッセージ本文(リクエストの場合、この情報はリクエストに応答するためのタグで囲まれています)で構成されている必要があります。 XMLドキュメントを適切に形成するには、たとえば、その2つのコンポーネント部分である「タイトル」と「リクエスト」をタグで囲む必要があります。 典型的なドキュメントの種類を以下に示します。
HTMLドキュメントとは対照的に、ヘッダー(図4)には、送信されるドキュメントのタイプやその処理プロセスに関する情報など、さまざまな種類のサービス情報が含まれている必要があります。 ドキュメントの本文は情報処理に入ります。 タグで囲まれたコンテンツ。 見出しの構造は、すべてのタイプのドキュメントで同じである必要があることに注意してください。
サーバーによって起動されるプロセスの場合、次のように処理アルゴリズムを構築することをお勧めします(必須ではありません)。
![](https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg)
図6。
クライアント側を作成する際のいくつかの基本的なポイント
すでに説明したように、XMLドキュメントを作成するときは、DOMモデルの形式での表現が使用されます。 以下は、メッセージxmlヘッダー生成プログラムのDelphiテキスト部分の例です。
手順 TThread1.HeaderCreate(送信者:Tobject); var //クラス宣言、作成に必要 coDoc:CoDomDocument; // XMLDomDocumentオブジェクト Doc:DomDocument; r:IXMLDOMElement; ノード:IXMLDOMElement; // DOMText txt:IXMLDOMText; // DOMAttribute attr:IXMLDOMAttribute; 始める // DOMドキュメントを作成します Doc:= coDoc.Create; Doc.Set_async(false); // DOMドキュメントの最初の開始 Doc.LoadXML( "変数coDoc:CoDomDocumentおよびDoc:DomDocumentの宣言、およびCreateメソッド(Doc:= coDoc.Create;)によるその作成は1回行われることに注意してください。 変数宣言は、この例で明確にするために示されているように、ローカルプロシージャではなく、グローバル変数を説明するセクションにあります(つまり、1つのプログラムモジュールごとに1つのDomDocumentタイプのグローバル変数)。
上記のプログラムの作業の結果は、作成されたヘッダーになり、図5に示す例のxml-documentに適用されます。
![](https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif)
図5。
図6。
XMLドキュメントの形式で情報を転送する主な利点は、受信側と送信側の両方で、DBMSの独立したテーブル構造を使用してメッセージを形成できることです。 この例を使用して、図6に示す構造のDBMSから、エンタープライズAの請求書に関する情報を転送する必要があるとします。
請求書を含むxmlドキュメントを生成するために、SQLクエリ(クエリA)は、最初に請求書自体に関する情報を使用して作成されます。
選択する* FROM Invoice_General どこ InvoiceNum =:num 選択する商品、品質、価格、HZ_cod から品 どこ InvoiceNum =:num //:numは、請求書番号を指定するパラメーターです。以下は、xmlドキュメントの本文を生成するプログラムの一部です。
手順 TThread1.DataBodyCreate(送信者:Tobject); var //クラスとXMLDomDocumentオブジェクトの宣言// coDoc:CoDomDocument; //モジュール全体でグローバルである必要があります。// Doc:DomDocument; // DOMElementオブジェクトを宣言します r:IXMLDOMElement; // DOMElement; ノード、ノード2:IXMLDOMElement; Node3、Node4:IXMLDOMElement; // DOMText txt:IXMLDOMText; str:文字列; // 請求書番号: 整数;-グローバル変数-//値は987654 // queryA、queryB: 弦;-グローバル変数、//リクエストに対応する値を持ちます// queryA-請求書に関する一般情報を含むリクエストA // queryB-//請求書に記載されている商品に関するリクエストB情報(テキストを参照) 始める Query.Close; //「リクエストA」というテキストを参照してください Query.Text:= queryA; //リクエストを実行します Query.ExecSQL; Query.Open; //ルート要素のアドレスを取得します r:= Doc.Get_documentElement; Node2:= Doc.createElement( "Request"); // DOMElement(タグ)を作成しますノード:= Doc.createElement( "Invoice"); //ルートに要素を追加します r.appendChild(Node2); //アイテムを追加します Node2。 appendChild(ノード); // DOMElement(タグ)を作成します Node3:= Doc.createElement( "Depurture"); //アイテムを追加しますノード。 appendChild(Node3); //リクエストの「Depurture」フィールドを呼び出します str:= Query.FieldByName( "Depurture")。AsString; //テキストノードを作成=フィールド値//ノードに値を割り当てます //テキストノード、変数str Node.appendChild(txt); //タグの同様の操作この手順の結果として、XMLドキュメントの次のテキストが生成されます。
![]() |
リクエストを作成するには、オブジェクトのOpenメソッドを使用します IXMLHttpRequest:
手順 Open(const bstrMethod、-method type = "POST" bstrUrl、-Server url varAsync、-通信モード非同期/同期= true bstrUser、-認証用のユーザー名bstrPassword)-パスワードドキュメント処理のサーバー側の作成
前述のように、HTTPリクエストの処理は、CGIアプリケーションまたはJavaサーブレットのいずれかで処理できます。 ASPページの作成のバリエーションも可能です。 ただし、この場合、データ転送はクエリ文字列を介した「GET」メソッドによってのみ可能です。 ただし、ASPページのHTTPリクエストの処理は、CGIアプリケーションよりも効率的です。 しかし、私の意見では、それをどのように処理するかは重要ではありませんが、問題を解決することがより重要です-処理プログラムを構築する方法であり、どのような手段ではありません。
前の章でXMLドキュメントを作成するためのオプションを検討した場合、サーバーアプリケーションのタスクは逆になります。つまり、XMLドキュメントを解析します。 以下は、xmlドキュメントを解析するプログラムの一部です。
手順 Tthread1.DataParser(送信者:Tobject); var // DOMElementオブジェクトを宣言します r、FNode:IXMLDOMElement; Str、ファイル名:文字列; parm:文字列; // soclass宣言と CoDocXML、CoDocXSL、CoDocResult:CoDomDocument; // XMLDomDocumentオブジェクト XMLDoc、XSLDoc、ResultDoc:DomDocument; // HttpStr:文字列; -HTTPリクエスト文字列を含むグローバル変数 始める XMLDoc:= coDocXML.Create; XMLDoc.LoadXML(HttpStr); //ルート要素のアドレスを取得します r:= Doc.Get_documentElement; //要素の値を取得します FNode:= r.SelectSingleNode( "// TypeDocument"); //属性id = "Order"の値を取得します FileName:= FNode.GetAttibute( "id"); //ファイル名Order.xslの形成 FileName:= FileName + "。Xsl"; // XSLDocドキュメントを作成します XSLDoc:= coDocXSL.Create; XSLDoc.LoadXML(FileName); // XMLDocドキュメントを作成します ResultDoc:= coDocResult.Create; //同期処理モードを設定します ResultDoc.Set_async(false); //解析チェックを設定します ResultDoc.validateOnParse:= true; // XSLテンプレートを使用してXMLDocを解析します XMLDoc.transformNodeToObject(XSLDoc、ResultDoc); // Str変数にはテキスト値が割り当てられます //結果のドキュメントの。 Str:= ResultDoc.text; //要素を検索します FNode:= r.SelectSingleNode( "// InvoiceNumber"); //そして要素の値を取得します parm:= FNode.text; //アクセスのリクエストを閉じます Query.Close; Query.Text:= Str; //パラメータ値の割り当て Query.Params.AsString:= parm; //リクエストを実行します Query.ExecSQL; 終わり;解析の全体的なハイライトは、ドキュメントのタイプごとに個別に生成されるXSLテンプレートの使用にあります。 解析の結果はSQLクエリ文字列です。 その後、生成されたSQLクエリ文字列を実行すると、DBMS内のデータに必要な変更が加えられます。
テンプレートを介した解析を使用する利点は、ある種のデータの柔軟性が得られ、プログラムコードからアルゴリズムが完全に独立していることです。 以下は、タイプORDERのドキュメントを処理するために使用されるXSLテンプレートのテキストです。
上記の例を説明すると、タグのペアの使用は本質的に形式的であることに注意する必要があります。 解析後、結果のXMLドキュメントには正式に少なくとも1つのノードが含まれている必要があります。 ResultDoc.textメソッドは、XMLドキュメントの解析中に取得されたResultDocのテキスト値を割り当てます。 この場合、値はタグのペアで囲まれたすべてのものです。 生成したSQLクエリ。
プログラムを書くことのもう一つの特徴は、SQLパラメータを使用する可能性に注意する必要があります :num。このパラメーターを使用すると、xslテンプレートのテキストが簡略化されます。 XMLドキュメントのノードの対応する要素の値の定義は、最初に、対応するノードの名前による選択によって決定されます。次に例を示します。
XSLの概要
略語XSLは、eXtensible Stylesheet Language(スタイルシートフォーマット言語(XMLデータ))に由来します。 ヘッダーからわかるように、XMLデータのフォーマットにはeXtensible Stylesheet Language(XSL)が使用されます。 定義上、W3CXSLは次の2つの部分で構成されています。
- XSLT-XSL変換。 XMLドキュメントの変換またはフォーマット(変換)に使用される言語。 したがって、XSLTの助けを借りて、一連のデータのさまざまなカットとデータ表示の形式を取得できます。
- 書式設定要素。 これらの要素には、XSLで処理された後のデータのすべての活版印刷要素が含まれます。 HTMLページの生成にのみ使用されます。
XSLTを使用すると、XMLファイルから必要なデータを選択し、ユーザーに提示するためのフォームに配置できます。 たとえば、この例では、XMLデータをSQLクエリの形式に変換しました。 XSLの一般的な使用法は、通常、データをHTMLページの形式で、またはまれにRTFファイルの形式でフォーマットすることです。
XSLファイルは、XMLデータの変換が実行されるテンプレートを記述します。 xslテンプレートに戻ると、XSLTでは次の要素(ディレクティブ)を区別できます。
XSLディレクティブ | 説明 |
---|---|
xsl:apply-templates | select属性に一致するテンプレートの使用を示すディレクティブ= "template name" |
xsl:属性 | 属性ツリーを作成し、それを出力要素に追加します。パラメータ名= "属性名"、名前空間は名前空間URI(名前空間プレフィックス)です |
xsl:call-template | テンプレートを呼び出します。属性名= "URIからテンプレート" |
xsl:選択 xsl:いつ xsl:それ以外の場合 |
条件xslによる選択:expr = "スクリプトでの式の評価"の場合、 language = "言語名" test = "評価された式" |
xsl:コメント | 出力ドキュメントにコメントを生成します |
xsl:コピー xsl:コピー- |
現在のノードを出力ソースにコピーするか、select属性が「ソースノード名」であるノードにドキュメントフラグメントを挿入します |
xsl:要素 | 名前、属性名= "要素名"、名前空間= "uri名前空間参照"で出力要素を作成します |
xsl:for-each | テンプレートをノードリストのすべてのノードに再適用します。select属性はノードのリストを指定します |
xsl:if | テスト属性によって式として設定される条件チェック |
xsl:含める | 外部テンプレートを含む、属性href = "URI参照" |
xsl:出力 | 出力を指定します。メソッド属性は「xml」、「html」、または「text」です。 |
xsl:param | パラメータの値を指定します。属性名= "パラメータ名"、select = "値" |
xsl:処理命令 | 処理命令を作成します。属性名= "命令プロセスの名前" |
xsl:並べ替え | ノードのセットを並べ替え、属性select = "node name"、data-type = data type( "text" | "number" | Qname)、order = sort direction( "ascending" | "descending") |
xsl:スタイルシート | xslテンプレートドキュメントを定義し、XSLTのルート要素です |
xsl:テンプレート | xsl-templateを定義します。属性名= "テンプレート名のURIプレフィックス"、match = "テンプレートが適用されるノードの表示" |
xsl:テキスト | 出力ストリームへのテキストを生成します。属性disable-output-escaping = "yes"または "no"は、ESC文字を生成する機能を示します |
xsl:value-of | 選択したノードの値をテキストとして挿入します。属性select = "pointer to node"から、値が取得されます |
xsl:変数 | 変数の境界の値を指定します。属性名= "変数名"、select = "変数値の計算" |
xsl:with-param | テンプレートにパラメータを適用します。属性名は「パラメータ名」、select =式は現在のコンテキストを評価し、デフォルト値は「。」です。 |
結論
最後に、標準のXMLパーサーを使用することに注意してください。 msxml.dll XMLドキュメントを解析および作成するためのツールはこれだけではありません。 たとえば、XMLドキュメントを作成するには、コンポーネントを効果的に使用します TPageProduserと TableProduser..。 ただし、この記事では、実際のDOMモデルの幅と適用性のみを強調しています。
著者は、トピックの関連性、一般的なコンテンツ、プレゼンテーションスタイル、および記事のコレクションの作成とカバーする本のリリースの品質をさらに向上させるのに役立つ他のすべてのコメントに関するフィードバックに非常に感謝します。 eコマースでXMLドキュメントを使用する実用的な側面のトピック。 電子文書の使用の実際的な側面に関するより詳細な情報は、著者のWebサイトwww.eDocs.al.ruにあります。また、著者のサイトに原文と例を掲載する予定です。