0

スタイルシートの属性にグローバル マッチがありますが、 f - 要素を除外したいと考えています。どうやってやるの?

XML の例:

<a>
<b formatter="std">...</b>
<c formatter="abc">...</c>
<d formatter="xxx">
    <e formatter="uuu">...</e>
    <f formatter="iii">
        <g formatter="ooo">...</g>
        <h formatter="uuu">...</h>
    </f>
</d>
</a>

現在の解決策:

<xsl:template match="//*[@formatter]">
   ...
</xsl:template>

私はこのようなことを試しましたが、うまくいきませんでした。

<xsl:template match="f//*[@formatter]">
...
</xsl:template>

<xsl:template match="//f*[@formatter]">
...
</xsl:template>
4

1 に答える 1

3

または のどちら//f[@formatter]f[@formatter]が機能していたはずです (これは必須で//はありません)。サンプル入力に対してこの XSLT を実行すると、次のようになります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="*[@formatter]">
    <xsl:element name="transformed-{local-name()}">
      <xsl:apply-templates select="@* | node()" />
    </xsl:element>
  </xsl:template>

  <xsl:template match="f[@formatter]">
    <xsl:apply-templates select="node()" />
  </xsl:template>
</xsl:stylesheet>

結果は次のとおりです。

<a>
  <transformed-b formatter="std">...</transformed-b>
  <transformed-c formatter="abc">...</transformed-c>
  <transformed-d formatter="xxx">
    <transformed-e formatter="uuu">...</transformed-e>

      <transformed-g formatter="ooo">...</transformed-g>
      <transformed-h formatter="uuu">...</transformed-h>

  </transformed-d>
</a>

ご覧のとおり、fは除外されています。これはあなたの問題に答えていますか、それともあなたがやりたいことを誤解していますか?

于 2013-03-18T09:48:05.620 に答える