ヒント: 「XSLT 初心者からマスターまで」のスペースの説明の核心部分を抜粋しました。これを出発点として、皆様が積極的に議論に参加していただければ幸いです。空間についてのあなたの理解について話してください。
XML ファイル構造をある程度理解している学者のみに適しており、初心者には適していません。上から下まで読んでください。
HTML ファイルの場合、スペースは重要ではありませんが、XML の場合、デフォルトの位置ではスペース ノードが保持されます (スペース ノードの説明については以下を参照)。
XML 仕様によれば、いわゆるスペースは 4 つの文字の任意の組み合わせシーケンスです:
-----------------------
スペース文字( space)、対応する文字値は #x20
改行文字 (Carriage Return)、対応する文字値は #xD
改行文字 (Newline)、対応する文字値は #xA
tab 文字 (Tab)、対応する文字値#x9です。
xml ファイル内のスペースも、スペース ノードであるノードを形成します。スペース ノードはテキスト ノード タイプに属します。
XML およびXML 入力ファイル内のどのスペースが重要であるかを判断するには、xslt プロセッサはこれらのスペース ノードを確認する必要があります。決定の鍵となるのは xml:space 属性です。
2. xsl テンプレート ファイル内でどのスペースが重要であるかを決定します。xslt プロセッサはこれを結果ツリーにコピーする必要があります。決定の鍵となるのは、xsl:strip-space
と xsl:PReserve-space の 2 つのコマンドです。
----------------------------
コンポーネントのコンテンツのみを配置できる場合コンポーネントの場合、コンポーネント内のスペース ノードは Insignificant です。コンポーネントのコンテンツのタイプが #PCDATA の場合、そのコンポーネント内のスペース ノードは Significant とみなされます。
コンポーネントのコンテンツがテキストコンテンツとコンポーネントの混合である状況については、コンポーネントとそのコンテンツの意味論的な意味に依存して判断することはできません。
xsltプロセッサがxml入力ファイルと接触する前に、xmlパーサーによって分析されます
(1) xml :space 属性は、後続の XML アプリケーションによるスペース ノードの処理モードを変更できます。たとえば、xslt プロセッサは xml:space 属性の影響を受けます。
(2) XML ファイル内の列マークまたはコンテンツの末尾にある終了記号は、単一の改行文字 (#xA) に置き換えられます。
(3) 属性値が XML アプリケーションに渡される前に、XML パーサーは属性値に対して標準化された操作も実行する必要があります。これは、オペレーティング システムが異なると、テキストの各行の終了文字の組み合わせが異なるためです。たとえば、Windows システムでは終了記号を形成するために改行文字が使用されますが、Unix システムでは新しい文字のみが使用されます。行文字グループ
を使用して終了記号を形成します。 XML パーサーは XML ファイルを読み取った後、まずすべての終了記号を 1 つの改行文字に置き換えます。これにより、異なるシステム間での異なる終了記号のデザインの違いが統一されるだけでなく、後続の XML アプリケーションの操作の難しさも軽減されます。 。このようなプロセスを「正規化」と呼びます。
a. 各テキスト列の終了文字は単一の改行文字 (#xA) に正規化する必要があります。
b、スペース文字 (#x20、#xD、#xA、#x9) はスペース文字 (#x20) に置き換える必要があります。
c. 属性値に単語パラメータ コードが含まれている場合は、この参照文字に置き換える必要があります。たとえば、
は改行文字 (#xA) に置き換えられます。
d. 属性値にエンティティ参照が含まれている場合は、その置換テキストで置き換える必要があります。
e、これ以外の文字は正規化された属性値に直接入れる必要があります。
f. 最後に、属性タイプが CDATA でない場合、XML パーサーは属性値の前後にある一連のスペース文字をさらに削除する必要があります。また、属性値の途中に一連のスペースがある場合は、同様に削除する必要があります。単一のスペース文字に置き換えることができます。
xslt プロセッサは、xml 入力ファイルと xsl テンプレート ファイルの構造ツリーを構築した後、コンポーネント内の隣接するテキスト ノードを 1 つのテキスト ノードにマージし、いくつかのテキスト ノードを削除します。ただし、テキスト ノードが以下の条件のいずれかを満たしている場合、テキスト ノードは保持されます。
-------------------------------------
(1) テキスト ノード親コンポーネントは、空白を保持する要素名のセットのメンバーです。
(2) テキストノードに少なくとも 1 つの非スペース文字があります。
(3) テキスト ノードの祖先コンポーネントに xml:space 属性があり、その値は保持されていますが、最近の祖先コンポーネントにはデフォルトである他の xml:space 属性値はありません。他のテキスト ノードは削除されます。
xsl テンプレートの場合、いわゆるスペース保持コンポーネント名セットには、使用可能な xsl:text コンポーネントが 1 つだけあります。 xsl テンプレート ファイル内のスペース ノードは削除されますが、スペース ノードが xsl:text コンポーネントに表示される場合は保持されます。
上記は、XML のスペースの完全な説明の詳細な紹介です。さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。