如何使用 xslt 包装匹配元素

How to wrap a matching element using xslt

我正在尝试使用 xslt 将 <fo:block-container> 包装器元素添加到任何匹配的 <table> 元素。 <fo:block-container> 需要使用与 <table>

相同的 width 属性值

一个示例来源就像

<table width="654px">
 --contents
</table>

想要的结果会像

<fo:block-container width="654px">
  <fo:table width="654px">
     --contents
  </fo:table>
</fo:block-container>

到目前为止,我看到的一些类似的帖子是在 "matching" 元素内添加新元素 - 在本例中为 <table>,例如 。但我想使用我指定的包装器元素来包装整个匹配元素。

尝试:

<xsl:template match="table">
    <fo:block-container width="{@width}">
        <fo:table>
            <xsl:apply-templates select="@*|node()"/>
        </fo:table>
    </fo:block-container>
</xsl:template>

这假设您有其他模板来处理 table 的节点 - 请参阅此处的示例:https://xsltfiddle.liberty-development.net/ncntCSh/1