1

スタイルが「booktitle」の段落がいくつかあります。これらの段落を「Book Title」というタイトルの単語テーブルに変換したいと考えています。XML は以下のとおりです。

<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:p>
<w:pPr>
<w:pStyle w:val="booktitle"/>…
</w:pPr>
<w:r>
<w:rPr/>
<w:t>First Paragraph</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="booktitle"/>…
</w:pPr>
<w:r>
<w:rPr/>
<w:t>second Paragraph</w:t>
</w:r>
</w:p>
</w:document>

必要な出力:

本のタイトル
第 1 段落 第
2 段落

私のXSLはここにあります:

<xsl:template match="w:p">
<xsl:choose>
  <xsl:when test=".//w:pStyle[@w:val='booktitle']">
    <w:tbl>
      <w:tblPr>
        <w:tblBorders>
          <w:top w:val="single" w:sz="1" />
          <w:left w:val="single" w:sz="1" />
          <w:bottom w:val="single" w:sz="1" />
          <w:right w:val="single" w:sz="1" />
          <w:insideH w:val="single" w:sz="1" />
          <w:insideV w:val="single" w:sz="1" />
        </w:tblBorders>
      </w:tblPr>
      <w:tblGrid>
        <w:gridCol w:w="1024" />
        <w:gridCol w:w="1024" />
      </w:tblGrid>
      <w:tr><w:tc><w:p><w:r><w:t>Booktitle</w:t></w:r></w:p></w:tc></w:tr>
      <w:tr>
        <w:tc>
          <w:tcPr>
            <w:tcW w:w="1024" />
          </w:tcPr>
    <w:p><w:r><w:t><xsl:value-of select=".//w:r/w:t"/></w:t></w:r></w:p>
        </w:tc>
      </w:tr>
      </w:tbl>
  </xsl:when>
</xsl:choose>
</xsl:template>

私は次のような出力を得ています

Booktitle の
最初の段落
Booktitle の
2 番目の段落

タイトルはノードごとに繰り返されます。この問題を解決するのを手伝ってください。前もって感謝します...

4

1 に答える 1

0

w:pテンプレートからテーブル定義を取得する必要があると思います。xsl:chooseフィルターを使用して回避することもできます。

これは、テーブルの開始と終了を定義し、テンプレートを適用するメイン テンプレートw:pです。

<xsl:template match="/">
  <w:tbl>
    <w:tblPr>
      <w:tblBorders>
        <w:top w:val="single" w:sz="1" />
        <w:left w:val="single" w:sz="1" />
        <w:bottom w:val="single" w:sz="1" />
        <w:right w:val="single" w:sz="1" />
        <w:insideH w:val="single" w:sz="1" />
        <w:insideV w:val="single" w:sz="1" />
      </w:tblBorders>
    </w:tblPr>
    <w:tblGrid>
      <w:gridCol w:w="1024" />
      <w:gridCol w:w="1024" />
    </w:tblGrid>
    <w:tr><w:tc><w:p><w:r><w:t>Booktitle</w:t></w:r></w:p></w:tc></w:tr>
    <xsl:apply-templates select="//w:p[//w:pStyle/@w:val='booktitle']" />
    </w:tbl>
</xsl:template>

これはw:p単純にテーブル行を作成するテンプレートです:

<xsl:template match="w:p">
  <w:tr>
    <w:tc>
      <w:tcPr>
        <w:tcW w:w="1024" />
      </w:tcPr>
      <w:p><w:r><w:t><xsl:value-of select=".//w:r//w:t"/></w:t></w:r></w:p>
    </w:tc>
  </w:tr>
</xsl:template>
于 2012-07-06T05:41:01.143 に答える