<xsl:text> 要素
スタイル シートからテキスト ノードを生成します。 空白のみのノードは出力に残ります。
<xsl:text
disable-output-escaping = "yes" | "no">
</xsl:text>
属性
disable-output-escaping
既定値は "no" です。 値が "yes" である場合、<xsl:text> 要素をインスタンス化することによって生成されたテキスト ノードは、エスケープなしで出力されます。 たとえば、次の例では "<" という 1 文字が生成されます。<xsl:text disable-output-escaping="yes"><</xsl:text>
注意
disable-output-escaping="yes" を使用すると、整形式でないドキュメントを生成できるため、注意する必要があります。出力が整形式でない場合、状況によってはエラーとなる場合があります。たとえば、XML ドキュメントに対する transformNodeToObject は、結果が整形式である必要があるため、disable-output-escaping がドキュメントの整形式に影響を及ぼしていると、完了しないことがあります。disable-output-escaping="yes" は、潜在的な危険を理解したうえで利用する高度な機能であると考えてください。
要素情報
出現回数 |
無制限 |
親要素 |
xsl:attribute、xsl:comment、xsl:copy、xsl:element、xsl:fallback、xsl:for-each、xsl:if、xsl:otherwise、xsl:message、xsl:param、xsl:processing-instruction、xsl:template、xsl:variable、xsl:when、xsl:with-param、出力要素 |
子要素 |
(子要素はありません) |
解説
スタイル シートでは、<xsl:text> を使用しても、しなくても、リテラル結果ツリーにテキストを生成できます。 ただし、この要素を使用すれば、スタイル シートで作成される空白をより厳密に制御できます。 たとえば、スタイル シートを読みやすくするために、テンプレートで 1 行ごとに 1 つの要素を書き込み、一部の行をインデントするとします。 その場合は、テンプレート規則の一部として空白が取り込まれます。 空白が含まれることは、変換の効果として望ましいことも、望ましくないこともあります。
ときには、2 つのデータ値を区切る空白文字を挿入したいことがあります。 その場合は、<xsl:text> 要素を使用できます。 <xsl:text> で囲まれた空白は結果ツリーに出力されます。 したがって、次に示すテンプレートを使用すれば、
<xsl:template match="a-node">
<xsl:text>
</xsl:text>
</xsl:template>
必ず新しい行のテキスト ノードが結果ツリーに出力されます。 ただし、<xsl:text> で囲まれていない空白のみのテキスト ノードは、結果ツリーから除去されます。 空の <xsl:text/> 要素を使用する方法を次の例で示します。
使用例
XML ファイル (text.xml)
<?xml version="1.0"?>
<topic>
<text>First line.</text>
<text>Second line.</text>
<text></text>
</topic>
XSLT ファイル (text.xsl)
次のスタイル シートでは、空の <xsl:text/> 要素を使用することで、テンプレート規則により生成される空白文字 (スペース、改行、タブ) をすべて削除します。 結果は、次の書式付き出力になります。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text">
<xsl:text/>"<xsl:value-of select="."/>"<xsl:text/>
</xsl:template>
</xsl:stylesheet>
HTML ファイル (text.htm)
次の HTML ファイルを使用して XSLT 変換を実行し、結果を確認します。
<html>
<head>
<title></title>
</head>
<body onload="init()">
<div><input type="text" id="xmlName" value="text.xml"></div>
<div><input type="text" id="xslName" value="text.xsl"></div>
<div><input type=button value="transform" onclick="trans();"></div>
<div id="divErr"></div>
<pre id="preRes" style="background:blue;color:gold"></pre>
</body>
<script language="javascript">
function trans()
{
xmlFile=xmlName.value;
xslFile=xslName.value;
if (xmlFile == "" || xslFile == "")
{
divErr.innerHTML = "invalid xml/xsl file names.";
}
var xsl = new ActiveXObject("MSXML2.DOMDOCUMENT.6.0");
var xml = new ActiveXObject("MSXML2.DOMDocument.6.0");
xml.validateOnParse = false;
xml.async = false;
xml.load(xmlFile);
if (xml.parseError.errorCode != 0)
divErr.innerHTML = "XML Parse Error : " + xml.parseError.reason;
xsl.async = false;
xsl.load(xslFile);
if (xsl.parseError.errorCode != 0)
divErr.innerHTML = "XSL Parse Error : " + xsl.parseError.reason;
try
{
res = xml.transformNode(xsl.documentElement);
preRes.innerText = res;
}
catch(err)
{
divErr.innerHTML = "Transformation Error:"
+err.number+"*"+err.description;
}
}
</script>
</html>
手順を次に示します。
コード サンプルを適切なファイルにコピーして、そのファイルをローカル ドライブに保存します。
HTML ファイル text.htm をダブルクリックします。
表示された Web ページ上の transform ボタンをクリックします。
出力
上記の XSLT スタイル シートをそのまま使用すると、すべてのテキスト値が順に結合され、1 行で出力されます。
"First line.""Second line."""
text 要素に一致するテンプレートから両方の <xsl:text/> 要素を削除すると、次の出力が得られます (7 行になります)。
"First line."
"Second line."
""
テンプレートから最初の <xsl:text/> 要素のみを削除すると、次の出力が得られます (4 行になります)。
"First line."
"Second line."
""