3

XSLT 1.0 で、実際の xslt ドキュメントで「以前に出力された」別の値に基づいて値を出力することは可能ですか?

私はこれを言う正しい方法を見つけることができないようです。うまくいけば、例は理解しやすいはずです。

<xsl:stylesheet>
  <xsl:param name="ServerUrl" select="'http://www.myserver.com/'"/>
  <xsl:template match="/">
    <html>
      <body>
        <img src="images/image1.jpg">
          <xsl:attribute name="src">
            <xsl:value-of select="concat($ServerUrl,**Value of current @src**)" />
          </xsl:attribute>
        </img>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

次の出力が必要です。

<html>
  <body>
    <img src="http://www.myserver.com/images/image1.jpg"></img>
  </body>
</html>

最初はこれが間違っているように思えるかもしれませんが、その意図は、XSLT を元の HTML にできる限り近づけて、さらなる変更を容易にすることです。

4

2 に答える 2

1

次のスタイルシートでは、XSLT を XML ドキュメントとしてロードし、属性値document()への XPath をロードする空のパスを持つ関数を使用します。img/@src

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">
    <xsl:param name="ServerUrl" select="'http://www.myserver.com/'"/>
    <xsl:template match="/">
        <html>
            <body>
                <img src="images/image1.jpg">
                    <xsl:attribute name="src">
                        <xsl:value-of select="concat($ServerUrl, document('')/xsl:stylesheet/xsl:template[@match='/']/html/body/img/@src)" />
                    </xsl:attribute>
                </img>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

2 番目の@src属性定義が「優先」され、出力に生成されます。

7.1.3 属性の作成

要素に属性を追加すると、その要素の既存の属性が同じ展開名に置き換えられます。

ただし、このアプローチはお勧めしません。読んだり理解したりするのは紛らわしく、標準的な方法ではありません。

于 2013-07-14T03:21:10.493 に答える