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
Xml XSLT 2.0对格式(x.y.z)中的分层字符串重新编号_Xml_Xslt - Fatal编程技术网

Xml XSLT 2.0对格式(x.y.z)中的分层字符串重新编号

Xml XSLT 2.0对格式(x.y.z)中的分层字符串重新编号,xml,xslt,Xml,Xslt,我有一些包含属性的元素,我需要按顺序对这些属性重新编号,以整理大量渗入XML的漏洞。我的消息来源如下: <ul> <li book="1" chapter="1" page="1"/> <li book="1" chapter="6" page="2"/> <li book="2" chapter="2" page="3"/> <li book="5" chapter="3" page="1"/> <

我有一些包含属性的元素,我需要按顺序对这些属性重新编号,以整理大量渗入XML的漏洞。我的消息来源如下:

<ul>
    <li book="1" chapter="1" page="1"/>
    <li book="1" chapter="6" page="2"/>
    <li book="2" chapter="2" page="3"/>
    <li book="5" chapter="3" page="1"/>
</ul>
<ul>
    <li>1.1.1</li>
    <li>1.2.1</li>
    <li>2.1.1</li>
    <li>3.1.1</li>
</ul>
我想创建一个如下所示的列表:

<ul>
    <li book="1" chapter="1" page="1"/>
    <li book="1" chapter="6" page="2"/>
    <li book="2" chapter="2" page="3"/>
    <li book="5" chapter="3" page="1"/>
</ul>
<ul>
    <li>1.1.1</li>
    <li>1.2.1</li>
    <li>2.1.1</li>
    <li>3.1.1</li>
</ul>
  • 1.1.1
  • 1.2.1
  • 2.1.1
  • 3.1.1
我基本上是按书本、章节、页面进行分组,然后重新开始每一级的计数(例如,我的第二行1.6.2是第一册的第二章,但第二章的第一页变成了1.2.1)

到目前为止,我假设每个组都需要一个:

<xsl:for-each-group select="descendant::li" group-by="concat(@book,'.',@chapter,'.',@page)">
    <xsl:sort select="@book" data-type="number" order="ascending"/>
    <xsl:sort select="@chapter" data-type="number" order="ascending"/>
    <xsl:sort select="@page" data-type="number" order="ascending"/>
    <xsl:variable name="a" select="position()"/>
    <xsl:for-each-group select="current-group()" group-by="concat(@book,'.',@chapter)">
        <xsl:variable name="c" select="position()"/>
        <xsl:for-each-group select="current-group()" group-by="@book">
            <xsl:variable name="b" select="position()"/>
            <!-- Renumbered -->
            <li>
                <xsl:value-of select="concat($a,'.',$b,'.',$c)"/>
            </li>
            <!-- Original (for check) -->
            <!--<li>
                <xsl:value-of select="concat(current-group()[1]/@book,'.',current-group()[1]/@chapter,'.',current-group()[1]/@page)"/>
            </li>-->
        </xsl:for-each-group>
    </xsl:for-each-group>
</xsl:for-each-group>

  • 问题是,我想我需要在多个级别上进行分组(通过@book对@chapter进行重新编号,通过@book、@chapter对@page进行重新编号),以便为每个组返回正确的位置(),据我所知,这是不可能的。我很感激我的代码目前还远未实现,但我想不出下一步该怎么做


    渴望获得XSLT2.0解决方案。谢谢您的时间-非常感谢。

    我认为这比您做的要简单。您不需要concat业务,只需在每个级别按一个属性分组即可

    <xsl:for-each-group select="li" group-by="@book">
      <xsl:variable name="book" select="position()" />
      <xsl:for-each-group select="current-group()" group-by="@chapter">
        <xsl:variable name="chapter" select="position()" />
        <xsl:for-each-group select="current-group()" group-by="@page">
          <xsl:variable name="page" select="position()" />
          <xsl:for-each select="current-group()">
            <li><xsl:value-of select="$book, $chapter, $page" separator="." /></li>
          </xsl:for-each>
        </xsl:-for-each-group>
      </xsl:for-each-group>
    </xsl:for-each-group>
    
    
    
  • 如果您需要排序,那么只需在每个级别放置一个合适的

    <xsl:for-each-group select="li" group-by="@book">
      <xsl:variable name="book" select="position()" />
      <xsl:for-each-group select="current-group()" group-by="@chapter">
        <xsl:variable name="chapter" select="position()" />
        <xsl:for-each-group select="current-group()" group-by="@page">
          <xsl:variable name="page" select="position()" />
          <xsl:for-each select="current-group()">
            <li><xsl:value-of select="$book, $chapter, $page" separator="." /></li>
          </xsl:for-each>
        </xsl:-for-each-group>
      </xsl:for-each-group>
    </xsl:for-each-group>