XSLT包装除一个元素外的任意元素
我一直在关注,但仍然无法解决下面描述的问题。在XSLT包装除一个元素外的任意元素,xslt,xslt-1.0,Xslt,Xslt 1.0,我一直在关注,但仍然无法解决下面描述的问题。在元素中,我需要将任意元素(/nodes)包装到中,根据以下示例: <ol> text <p>text</p> <li> text <p>text</p> </li> <p>text</p> text <sub>text</sub> &
元素中,我需要将任意元素(/nodes)包装到
中,根据以下示例:
<ol>
text
<p>text</p>
<li>
text
<p>text</p>
</li>
<p>text</p>
text
<sub>text</sub>
</ol>
文本
正文
文本
正文
正文
文本
文本
转换为:
<ol>
<li>
text
<p>text</p>
</li>
<li>
text
<p>text</p>
</li>
<li>
<p>text</p>
text
<sub>text</sub>
</li>
</ol>
<root>
<ol>
<li>
text
<p>text</p>
</li>
<li>
text
<p>text</p>
</li>
<li>
<p>text</p>
text
<sub>text</sub>
</li>
</ol>
<ol>
<li>
text
<p>text</p>
</li>
</ol>
</root>
文本
正文
文本
正文
正文
文本
文本
我正在使用XSLT1.0。
非常感谢您的帮助
更新示例
<root>
<ol>
text
<p>text</p>
<li>
text
<p>text</p>
</li>
<p>text</p>
text
<sub>text</sub>
</ol>
<ol>
text
<p>text</p>
</ol>
</root>
文本
正文
文本
正文
正文
文本
文本
文本
正文
转换为:
<ol>
<li>
text
<p>text</p>
</li>
<li>
text
<p>text</p>
</li>
<li>
<p>text</p>
text
<sub>text</sub>
</li>
</ol>
<root>
<ol>
<li>
text
<p>text</p>
</li>
<li>
text
<p>text</p>
</li>
<li>
<p>text</p>
text
<sub>text</sub>
</li>
</ol>
<ol>
<li>
text
<p>text</p>
</li>
</ol>
</root>
文本
正文
文本
正文
正文
文本
文本
文本
正文
我会尝试将其作为Muenchian分组来解决,其中键对前面的兄弟姐妹::li
元素进行计数,ol
元素的所有非li
子节点:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="group" match="ol/node()[not(self::li)]" use="count(preceding-sibling::li)"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ol/node()[not(self::li)][generate-id() = generate-id(key('group', count(preceding-sibling::li))[1])]">
<li>
<xsl:copy-of select="key('group', count(preceding-sibling::li))"/>
</li>
</xsl:template>
<xsl:template match="ol/node()[not(self::li)][not(generate-id() = generate-id(key('group', count(preceding-sibling::li))[1]))]"/>
</xsl:transform>
在线样本位于。谢谢!我刚刚意识到,在前面提到的示例中,我将
确定为根元素。但这不完全是我的情况。因此,我更新了问题。我将尝试调整您的解决方案。