0

あるxml形式を別のxml形式に変換するためにxslt2.0を使用しています。これは私のサンプルxmlドキュメントです。

<w:document>
    <w:body>
             <w:p>Para1</w:p> 
             <w:p>Para2</w:p> 
             <w:p>Para3</w:p> 
             <w:p>Para4</w:p> 
    </w:body>
</w:document>

最初はこれが私のxmlformat.soであり、<w:p>以下に示すxsltの関数を介してすべての要素を処理しました...

 <xsl:template match="document">
      <Document>
    <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
      </Document>    
</xsl:template>

したがって、そのxslt関数では、これらの要素を再フォーマットする方法をコーディングしました。正常に機能しています...

しかし今、Xmlフォーマットは以下のように再構築されています...

<w:document>
        <w:body>
                 <w:tbl><!--some text with children elements--></w:tbl>
                 <w:tbl><!--some text with children elements--></w:tbl>
                 <w:p>Para1</w:p> 
                 <w:p>Para2</w:p> 
                 <w:p>Para3</w:p> 
                 <w:p>Para4</w:p> 
        </w:body>
 </w:document>

したがって、今のところ、両方と要素を同じシーケンスで処理する必要があります。

私がやりたいのは、

elemtentsに遭遇した場合は、以下に示すテンプレートを呼び出す必要があります...

<xsl:template match="document">
     <Document>
        <xsl:for-each select="w:tbl">
          <xsl:apply-templates select="w:tbl">
              </xsl:apply-templates>
      </xsl:for-each>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

<xsl:template match="w:tbl">
<!--xslt code here -->
</xsl:template>

しかし、変換を試みたときにfor-eachステートメントが実行されません...

だから、この問題から抜け出すために私を導いてください...

4

1 に答える 1

1

代わりに

<xsl:template match="document">
     <Document>
        <xsl:for-each select="w:tbl">
          <xsl:apply-templates select="w:tbl">
              </xsl:apply-templates>
      </xsl:for-each>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

あなたは単に欲しい

<xsl:template match="document">
     <Document>
        <xsl:apply-templates select="w:body/w:tbl"/>
        <xsl:sequence select="mf:group(body/p, 1,count(//w:body//w:p)-1)"/>
     </Document>    
</xsl:template>

それでも期待どおりの結果が得られない場合は、希望する結果を示してください。

于 2012-12-17T16:57:45.713 に答える