我想為 XSL-FO 轉換準備 Word 檔案中的索引條目。
索引條目總是以
w:r/w:fldChar/@w:fldCharType="begin"并以 . 結尾
w:r/w:fldChar/@w:fldCharType="end"。
在這兩者之間,一個或多個元素可能包含內容。
如何將內容作為連續字串獲取?
我已經嘗試過使用 for-each-group 的不同變體。但問題是它總是洗掉不屬于索引的其他 w:r。
我怎樣才能做到這一點?
源 XML
<w:p>
<w:r>
<w:t>Stahl und Beton</w:t>
</w:r>
<w:r>
<w:t>l?sst</w:t>
</w:r>
<w:r>
<w:t> sich aus dem alten Namen des Materials ableiten.</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="begin"/>
<w:r>
<w:instrText> XE "</w:instrText>
</w:r>
<w:r>
<w:instrText>Moniereisen</w:instrText>
</w:r>
<w:r>
<w:instrText>" </w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>
XSLT 嘗試之一
<xsl:template match="w:p[w:r[w:fldChar[@w:fldCharType = 'begin']]]">
<xsl:for-each-group select="*" group-starting-with="w:r[w:fldChar[@w:fldCharType = 'begin']]">
<xsl:if test="self::w:r[w:fldChar/@w:fldCharType = 'begin']">
<indexentry>
<xsl:for-each-group select="current-group()[position() gt 1]"
group-ending-with="w:r[w:fldChar[@w:fldCharType = 'end']]">
<xsl:if test="position() eq 1">
<xsl:apply-templates
select="current-group()[not(self::w:r[w:fldChar[@w:fldCharType = 'end']])]"/>
</xsl:if>
</xsl:for-each-group>
</indexentry>
</xsl:if>
</xsl:for-each-group>
</xsl:template>
實際輸出(簡化)
<indexentry>
<w:r/>
<w:r/>
<w:r/>
</indexentry>
期望的輸出
<w:p>
<w:r>
<w:t>Stahl und Beton</w:t>
</w:r>
<w:r>
<w:t>l?sst</w:t>
</w:r>
<w:r>
<w:t> sich aus dem alten Namen des Materials ableiten.</w:t>
</w:r>
<indexentry> XE "Moniereisen" </indexentry>
</w:p>
uj5u.com熱心網友回復:
對于外部xsl:if你想要一個xsl:choose/xsl:when而不是額外的推xsl:otherwise送到你的默認模板(例如身份轉換)。我不知道你是否需要 inner和 the ,我認為這樣做就足夠了。current-group()xsl:apply-templatesxsl:ifxsl:apply-templates<xsl:value-of select="current-group()[position() != last()]/w:r/w:instrText"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452486.html
