Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT包装除一个元素外的任意元素_Xslt_Xslt 1.0 - Fatal编程技术网

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>
    
    
    

  • 在线样本位于。

    谢谢!我刚刚意识到,在前面提到的示例中,我将
    确定为根元素。但这不完全是我的情况。因此,我更新了问题。我将尝试调整您的解决方案。