次のxmlがあるとします:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<display>
<xsl:for-each select="logline_t">
<xsl:text disable-output-escaping="yes"><</xsl:text> <xsl:value-of select="./line_1" <xsl:text disable-output-escaping="yes">></xsl:text>
<xsl:text disable-output-escaping="yes"><</xsl:text> <xsl:value-of select="./line_2" <xsl:text disable-output-escaping="yes">></xsl:text>
<xsl:text disable-output-escaping="yes"><</xsl:text> <xsl:value-of select="./line_3" <xsl:text disable-output-escaping="yes">></xsl:text>
</xsl:for-each>
</display>
</xsl:template>
</xsl:stylesheet>
ドキュメントに表示されるすべての xsl:text に disable-output-escaping="yes" を設定する方法はありますか?
< xsl:output method="text"/ > を配置するオプションがあり、毎回 & lt; のようなものがあることは知っています。< が表示されますが、line_1、line_2、または line_3 の値に「$lt;」が含まれていることがあります。変更したくないこと(つまり、変更する必要があるのはその間にあるものだけです)
これが私が達成しようとしていることです。私はこのxmlを持っています:
<readlog_l>
<logline_t>
<hora>16:01:09</hora>
<texto>Call-ID: 663903<hola>396@127.0.0.1</texto>
</logline_t>
</readlog_l>
そして、この翻訳:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<display>
<screen name="<xsl:value-of select="name(.)"/>">
<xsl:for-each select="logline_t">
< field name="<xsl:for-each select="*"><xsl:value-of select="."/></xsl:for-each>" value="" type="label"/>
</xsl:for-each>
</screen>
</display>
</xsl:template>
</xsl:stylesheet>
これを出力にしたい:
<?xml version="1.0"?>
<display>
<screen name="readlog_l">
<field name="16:01:09 Call-ID: 663903<hola>396@127.0.0.1 " value="" type="label">
</screen>
</display>
フィールド名内の「<」をエスケープしないようにする必要があることに注意してください。これが、出力メソッドテキストを使用できない理由です。
また、これは例であり、翻訳ははるかに大きいことに注意してください。そのため、必要なすべての '<' または '>' に対して disable-output-escaping を記述しない方法を見つけようとしています。
ありがとう!