我有几个段落的风格“booktitle”我想将这些段落转换为带有标题“Book Title”的word table。 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>
要求输出:
书名
第一段
第二段
我的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
第二段
每个节点都在重复标题。请帮我解决这个问题。提前谢谢......
答案 0 :(得分: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>