前后-处理说明-XSLT 2 我正在尝试匹配所有具有特定处理指令的元素(如上所述)和以下同级(和) 如果找到匹配项,则搜索max(entry@morerows)属性并添加等效的空行 请参阅我的XSLT,我需要将此逻辑(虚拟行创建)放入,这样我就不必修改@format的现有代码

前后-处理说明-XSLT 2 我正在尝试匹配所有具有特定处理指令的元素(如上所述)和以下同级(和) 如果找到匹配项,则搜索max(entry@morerows)属性并添加等效的空行 请参阅我的XSLT,我需要将此逻辑(虚拟行创建)放入,这样我就不必修改@format的现有代码,xslt,xslt-2.0,Xslt,Xslt 2.0,输入XML: <?xml version="1.0" encoding="UTF-8"?> <table format="wide"> <tgroup> <thead> <row> <entry>lorem ipsumrow entry</entry> <entry>lo

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
    <table format="wide">
       <tgroup>
          <thead>
             <row>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
                <entry>lorem ipsumrow entry</entry>
             </row>
          </thead>
          <tbody>
             <?changetrack remove_begin?>
             <row>
                <entry>first row entryrow entry</entry>
                <entry>firstrow entry</entry>
                <entry>firstrow entry</entry>
                <entry morerows="3">first row entry</entry>
                <entry>firstrow entry</entry>
                <entry>firstrow entry</entry>
                <entry>firstrow entry</entry>
                <entry>firstrow entry</entry>
             </row>
             <?changetrack remove_end?>
             <?changetrack insert_begin?>
             <row>
                <entry>secondrow entry</entry>
                <entry>secondrow entry</entry>
                <entry>secondrow entry</entry>
                <entry morerows="2">secondrow entry</entry>
                <entry>secondrow entry</entry>
                <entry>secondrow entry</entry>
                <entry>secondrow entry</entry>
                <entry>secondrow entry</entry>
             </row>
             <?changetrack insert_end?>
             <row>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
                <entry>Thirdrow entry</entry>
             </row>
             <?changetrack remove_begin?>
             <row>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
                <entry>Forthrow entry</entry>
             </row>
             <?changetrack remove_end?>            
             <row>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
                <entry>fifthrow entry</entry>
             </row>            
             <row>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
                <entry>sixthrow entry</entry>
             </row>
          </tbody>
       </tgroup>
    </table>

lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
lorem ipsumrow条目
第一行入口行入口
第一行条目
第一行条目
第一行条目
第一行条目
第一行条目
第一行条目
第一行条目
第二行条目
第二行条目
第二行条目
第二行条目
第二行条目
第二行条目
第二行条目
第二行条目
蒂德罗入口
蒂德罗入口
蒂德罗入口
蒂德罗入口
蒂德罗入口
蒂德罗入口
蒂德罗入口
蒂德罗入口
前方入口
前方入口
前方入口
前方入口
前方入口
前方入口
前方入口
前方入口
先进先出项目
先进先出项目
先进先出项目
先进先出项目
先进先出项目
先进先出项目
先进先出项目
先进先出项目
六掷球进入
六掷球进入
六掷球进入
六掷球进入
六掷球进入
六掷球进入
六掷球进入
六掷球进入
预期产出:

 <?xml version="1.0" encoding="UTF-8"?>
<table format="wide">
    <tgroup>
        <thead>
            <forow>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
                <entry format="wide">lorem ipsumforow entry</entry>
            </forow>
        </thead>
        <tbody>
            <?changetrack remove_begin?>
            <forow>
                <entry format="wide">first forow entryforow entry</entry>
                <entry format="wide">firstforow entry</entry>
                <entry format="wide">firstforow entry</entry>
                <entry moreforows="3">first forow entry</entry>
                <entry format="wide">firstforow entry</entry>
                <entry format="wide">firstforow entry</entry>
                <entry format="wide">firstforow entry</entry>
                <entry format="wide">firstforow entry</entry>
            </forow>
            <forow>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
            </forow>
            <forow>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
            </forow>
            <forow>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
                <entry format="wide">Dummy forow entry</entry>
            </forow>
            <?changetrack remove_end?>
            <?changetrack insert_begin?>
            <forow>
                <entry format="wide">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
                <entry moreforows="2">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
                <entry format="wide">secondforow entry</entry>
            </forow>
            <?changetrack insert_end?>
            <forow>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
                <entry format="wide">Thirdforow entry</entry>
            </forow>
            <?changetrack remove_begin?>
            <forow>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
                <entry format="wide">Forthforow entry</entry>
            </forow>
            <?changetrack remove_end?>
            <forow>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
                <entry format="wide">fifthforow entry</entry>
            </forow>
            <forow>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
                <entry format="wide">sixthforow entry</entry>
            </forow>
        </tbody>
    </tgroup>
</table>

lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
lorem ipsumforow入口
第一个forow入口forow入口
第一道入口
第一道入口
第一个入口
第一道入口
第一道入口
第一道入口
第一道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
假通道入口
第二个入口
第二个入口
第二个入口
第二个入口
第二个入口
第二个入口
第二个入口
第二个入口
第三次入境
第三次入境
第三次入境
第三次入境
第三次入境
第三次入境
第三次入境
第三次入境
Forthforow入口
Forthforow入口
Forthforow入口
Forthforow入口
Forthforow入口
Forthforow入口
Forthforow入口
Forthforow入口
第五次入境
第五次入境
第五次入境
第五次入境
第五次入境
第五次入境
第五次入境
第五次入境
第六次入境
第六次入境
第六次入境
第六次入境
第六次入境
第六次入境
第六次入境
第六次入境
我的XSLT:它与PIs不匹配

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="row">
        <xsl:variable name="format" select="ancestor::table/@format"/>
        <xsl:choose>
            <xsl:when test="$format = 'wide'">
                <forow format="wide">
                    <xsl:apply-templates/>
                </forow>
            </xsl:when>
            <xsl:when test="$format = 'compact'">
                <forow format="compact">
                    <xsl:apply-templates/>
                </forow>
            </xsl:when>
            <xsl:otherwise>
                <forow>
                    <xsl:apply-templates/>
                </forow>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if
            test="preceding-sibling::processing-instruction('changetrack')[contains(., 'remove_begin')][1] and following-sibling::processing-instruction('changetrack')[contains(., 'remove_end')][1]">
            <xsl:variable name="morerows" select="max(entry/@morerows)"/>
            <xsl:for-each select="$morerows">
                <row>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                </row>
            </xsl:for-each>
        </xsl:if>
    </xsl:template>


</xsl:stylesheet>

preceding-sibling::processing-instruction('changetrack')[contains(., 'remove_begin')][1]
 preceding-sibling::node()[normalize-space()][1][self::processing-instruction('changetrack')][contains(., 'remove_begin')]
<xsl:for-each select="1 to xs:int($morerows)">
<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="row">
        <xsl:variable name="format" select="ancestor::table/@format"/>
        <xsl:choose>
            <xsl:when test="$format = 'wide'">
                <forow format="wide">
                    <xsl:apply-templates/>
                </forow>
            </xsl:when>
            <xsl:when test="$format = 'compact'">
                <forow format="compact">
                    <xsl:apply-templates/>
                </forow>
            </xsl:when>
            <xsl:otherwise>
                <forow>
                    <xsl:apply-templates/>
                </forow>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if
            test="preceding-sibling::node()[normalize-space()][1][self::processing-instruction('changetrack')][contains(., 'remove_begin')] and following-sibling::node()[normalize-space()][1][self::processing-instruction('changetrack')][contains(., 'remove_end')]">
            <xsl:variable name="morerows" select="max(entry/@morerows)"/>
            <xsl:for-each select="1 to xs:int($morerows)">
                <row>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                    <entry>Dummay row entry</entry>
                </row>
            </xsl:for-each>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>