1

xsl:stylesheetコメント、空の(端末)タグ、空の属性を排除するために、この「アイデンティティのような」変換があります...しかし、2番目 xsl:whenは機能しません

  <xsl:template match="node()">
  <xsl:choose>
    <xsl:when test="name()='p' and not(./*) and not(normalize-space(.))"></xsl:when>
    <xsl:when test="not(name()='img') and not(name()='br') and not(./*) and not(text())"
    ></xsl:when> <!-- this line NOT WORKS -->
    <xsl:otherwise><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:otherwise>
  </xsl:choose>
  </xsl:template>

  <xsl:template match="@*">
  <xsl:choose>
    <xsl:when test="not(normalize-space(.))"></xsl:when>
    <xsl:otherwise><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:otherwise>
  </xsl:choose>
  </xsl:template>

  <xsl:template match="comment()"></xsl:template>

このコンテキストでタグを空にする条件を表現するのは誰ですか?

PS:「空のルール」についてはこちらで説明されています。使用しようとしましたが、なぜ機能しないのかわかりません。

4

1 に答える 1

1

空の要素は、子ノードを持たない要素です。

テンプレート一致の優先順位はあなたの友人です...以下は、あなたの説明に加えて、画像とブレーク要素で何をしていると思うかを満たす種類のアイデンティティスタイルシートでなければなりません.

<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

<!--toss these-->
<xsl:template match="comment() | 
                    *[not(node())] |
                    @*[not(normalize-space())]"/>

<!--preserve these-->
<xsl:template match="img|br" priority="1">
  <xsl:call-template name="identity"/>
</xsl:template>

<!--preserve everything else-->
<xsl:template match="@*|node()" name="identity">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>
于 2013-08-02T20:47:50.473 に答える