1

HTMLを出力する変換があります。<img />古いブラウザで(たとえばではなく)壊れてしまう可能性のある自己終了タグを回避するには、 <img></img>output-methodをである必要がありますhtml。次に、URLエンコードが適用されるため、アプリケーションが破損します。たとえば、次を参照してください。

入力

<html>
<head>
</head>
<body>
{{example}}
<a href="{{example}}" >abc</a>
<img src="http://placehold.it/20x20"></img>
</body>
</html>

変身

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" /><!-- either -->
<xsl:output method="html" indent="yes" /><!-- or -->
<xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
</xsl:transform>

最初のケースでは、出力は次のとおりです。

<?xml version="1.0"?>
<html>
<head>
</head>
<body>
{{example}}
<a href="{{example}}">abc</a>
<img src="http://placehold.it/20x20"/>
</body>
</html>

2番目の場合、出力は次のとおりです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
{{example}}
<a href="%7B%7Bexample%7D%7D">abc</a>
<img src="http://placehold.it/20x20">
</body>
</html>

最初のケースの良い点は、@href属性がURLエンコードされていないことです。これは私のアプリケーションの必需品です。しかし、2番目のバリアントによってより良く達成されるのは悪いことですが、それ<img>は自己閉鎖的であるということです。<img>これは、タグやその他のものであってはなりません。

method="html"URLエンコードなしでメリットを得る方法はありますか?はいの場合、どのように?

4

2 に答える 2

2

XSLT 2.0 では、シリアル化オプション escape-uri-attributes="no" を使用して、URL 属性の % エンコードを抑制することができます。XSLT 1.0 には同等のものはありません。

于 2013-01-06T22:54:29.677 に答える
1

PHPのXSLT1.0プロセッサを使用している場合は、次の解決策を試すことができます...

  1. method="html";を使用します
  2. このテンプレートを含める...

    <xsl:template match="@href">
      <xsl:attribute name="Muttaburrasaurus">
        <xsl:value-of select="." />
      </xsl:attribute>
    </xsl:template>
    
  3. Muttaburrasaurus結果の出力を文字列にロードし、出現するすべてのを。に置き換えますhref

コメントフィードで移行する可能性があることを示したように、将来Javaに移行する場合は、プロセッサがXSLT2.0以降であることを確認してください。escape-uri-attributes次に、M.Kayが述べた機能を使用できます。

于 2013-01-07T00:20:05.893 に答える