1

私は次の文書を持っています:

<Doc>
    <If cond="c">
       <Expr>Expr1</Expr>
    </If>
    <Expr>Expr2</Expr>
</Doc>

次のような出力を作成する必要があります。

If c { Expr1 } Expr2

ただし、私の場合、次のものが作成されます。

Expr1 If c { Expr1 } Expr2

次の XSLT があります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:template match="/">
       <xsl:element name="Doc">
            <xsl:apply-templates select="*" />
        </xsl:element>
    </xsl:template>

    <xsl:template match="If">
      <xsl:text>if </xsl:text><xsl:value-of select="@cond"/><xsl:text> {</xsl:text>
      <xsl:apply-templates select="Expr"/><xsl:text>}</xsl:text>
    </xsl:template>

    <xsl:template match="Expr">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="*">
    </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

0

この変換

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="If">
     if <xsl:value-of select="@cond"/> <xsl:text/>
     <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="If/Expr">
  <xsl:value-of select="concat(' { ', ., ' }')"/>
 </xsl:template>

 <xsl:template match="Expr">
  <xsl:value-of select="concat(' ', .)"/>
 </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合:

<Doc>
    <If cond="c">
        <Expr>Expr1</Expr>
    </If>
    <Expr>Expr2</Expr>
</Doc>

必要な正しい結果を生成します

 if c { Expr1 } Expr2

注意してください

これだけに変換を単純化すると、次のようになります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:template match="If">
          <xsl:text>if </xsl:text><xsl:value-of select="@cond"/><xsl:text> {</xsl:text>
          <xsl:apply-templates select="Expr"/><xsl:text>}</xsl:text>
        </xsl:template>

        <xsl:template match="Expr">
            <xsl:value-of select="."/>
        </xsl:template>
</xsl:stylesheet>

その後、正しい結果が生成されます:

if c {Expr1}
Expr2
于 2012-07-17T13:17:43.130 に答える
-1

人々がスタイルシートに求めている動作を正確に理解することは常に非常に困難ですが、あなたが求めているのは、「Expr要素の下のIf要素のみが括弧内で変換されるようにするにはどうすればよいですか?」ということだと思います。

に変更template match="Expr"してみてくださいtemplate match="If/Expr"- これは変換エンジンに、If の下にある Expr のみが一致する必要があることを伝えます。

于 2012-07-17T13:05:39.200 に答える