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,我有大量文件,其结构类似于以下a.html: <html> <body> <div class="a">aaa <div class="b">bbb</div> <div class="c">ccc1 <div class="d">ddd11 <div class="e">eee11</div> &

我有大量文件,其结构类似于以下a.html:

<html>
  <body>
    <div class="a">aaa
      <div class="b">bbb</div>
      <div class="c">ccc1
        <div class="d">ddd11
          <div class="e">eee11</div>
          <div class="f">fff11
            <div class="g">ggg111</div>
            <div class="g">ggg112</div>
            <div class="g">ggg113</div>
            <div class="g">ggg114</div>
            <div class="g">ggg115</div>
            <div class="g">ggg116</div>
          </div>
        </div>
        <div class="d">ddd12
          <div class="e">eee12</div>
          <div class="f">fff12
            <div class="g">ggg121</div>
            <div class="g">ggg122</div>
            <div class="g">ggg123</div>
            <div class="g">ggg124</div>
          </div>
        </div>
      </div>
      <div class="c">ccc2
        <div class="d">ddd21
          <div class="e">eee21</div>
          <div class="f">fff21
            <div class="g">ggg211</div>
            <div class="g">ggg212</div>
            <div class="g">ggg213</div>
            <div class="g">ggg214</div>
            <div class="g">ggg215</div>
          </div>
        </div>
      </div>
      ...
    </div>
  </body>
</html>
我使用以下a.xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="max_c"/>

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

 <xsl:template match="div[@class='a']">
  <xsl:copy>
   <xsl:apply-templates select="div[@class='a']" />
   <xsl:apply-templates select="div[@class='b']" />
   <xsl:apply-templates select="div[@class='c']" />
   <xsl:call-template name="AddC">
    <xsl:with-param name="count" select="$max_c - count(div[@class='c'])" />
   </xsl:call-template>
  </xsl:copy>
 </xsl:template>

 <xsl:template name="AddC">
  <xsl:param name="count" />
  <xsl:if test="$count > 0">
   <div class="c">ccc
   </div>
   <xsl:call-template name="AddC">
    <xsl:with-param name="count" select="$count - 1" />
   </xsl:call-template>
  </xsl:if>
 </xsl:template>

</xsl:stylesheet>

ccc
输出如下:

<html>
  <body>
    <div>
      <div class="b">bbb</div>
      <div class="c">ccc1
        <div class="d">ddd11
          <div class="e">eee11</div>
          <div class="f">fff11
            <div class="g">ggg111</div>
            <div class="g">ggg112</div>
            <div class="g">ggg113</div>
            <div class="g">ggg114</div>
            <div class="g">ggg115</div>
            <div class="g">ggg116</div>
          </div>
        </div>
        <div class="d">ddd12
          <div class="e">eee12</div>
          <div class="f">fff12
            <div class="g">ggg121</div>
            <div class="g">ggg122</div>
            <div class="g">ggg123</div>
            <div class="g">ggg124</div>
          </div>
        </div>
      </div>
      <div class="c">ccc2
        <div class="d">ddd21
          <div class="e">eee21</div>
          <div class="f">fff21
            <div class="g">ggg211</div>
            <div class="g">ggg212</div>
            <div class="g">ggg213</div>
            <div class="g">ggg214</div>
            <div class="g">ggg215</div>
          </div>
        </div>
      </div>
      <div class="c">ccc$count</div>
    </div>
  </body>
</html>
<xsl:copy>
  <xsl:apply-templates select="@* | div[@class='b']  | text()" />
  <xsl:apply-templates select="div[@class='c']" />

bbb
ccc1
ddd11
eee11
fff11
ggg111
ggg112
ggg113
ggg114
ggg115
ggg116
ddd12
eee12
fff12
ggg121
ggg122
ggg123
ggg124
ccc2
ddd21
eee21
fff21
ggg211
ggg212
ggg213
ggg214
ggg215
ccc$计数
这几乎就是我想要的,只有两个例外:

  • 第一个div已失去其class=“a”和aaa值
  • 添加的div class=“c”的值应为ccc3,而不是ccc$count
  • 我做错了什么

    像往常一样,我提前感谢您的帮助。

    第一个div失去了class=“a”和aaa值
    要添加缺少的属性和文本内容,请更改
    xslt:copy
    ,如下所示:

    <html>
      <body>
        <div>
          <div class="b">bbb</div>
          <div class="c">ccc1
            <div class="d">ddd11
              <div class="e">eee11</div>
              <div class="f">fff11
                <div class="g">ggg111</div>
                <div class="g">ggg112</div>
                <div class="g">ggg113</div>
                <div class="g">ggg114</div>
                <div class="g">ggg115</div>
                <div class="g">ggg116</div>
              </div>
            </div>
            <div class="d">ddd12
              <div class="e">eee12</div>
              <div class="f">fff12
                <div class="g">ggg121</div>
                <div class="g">ggg122</div>
                <div class="g">ggg123</div>
                <div class="g">ggg124</div>
              </div>
            </div>
          </div>
          <div class="c">ccc2
            <div class="d">ddd21
              <div class="e">eee21</div>
              <div class="f">fff21
                <div class="g">ggg211</div>
                <div class="g">ggg212</div>
                <div class="g">ggg213</div>
                <div class="g">ggg214</div>
                <div class="g">ggg215</div>
              </div>
            </div>
          </div>
          <div class="c">ccc$count</div>
        </div>
      </body>
    </html>
    
    <xsl:copy>
      <xsl:apply-templates select="@* | div[@class='b']  | text()" />
      <xsl:apply-templates select="div[@class='c']" />
    
    第一个div已失去其class=“a”及其值aaa
    要添加缺少的属性和文本内容,请更改
    xslt:copy
    ,如下所示:

    <html>
      <body>
        <div>
          <div class="b">bbb</div>
          <div class="c">ccc1
            <div class="d">ddd11
              <div class="e">eee11</div>
              <div class="f">fff11
                <div class="g">ggg111</div>
                <div class="g">ggg112</div>
                <div class="g">ggg113</div>
                <div class="g">ggg114</div>
                <div class="g">ggg115</div>
                <div class="g">ggg116</div>
              </div>
            </div>
            <div class="d">ddd12
              <div class="e">eee12</div>
              <div class="f">fff12
                <div class="g">ggg121</div>
                <div class="g">ggg122</div>
                <div class="g">ggg123</div>
                <div class="g">ggg124</div>
              </div>
            </div>
          </div>
          <div class="c">ccc2
            <div class="d">ddd21
              <div class="e">eee21</div>
              <div class="f">fff21
                <div class="g">ggg211</div>
                <div class="g">ggg212</div>
                <div class="g">ggg213</div>
                <div class="g">ggg214</div>
                <div class="g">ggg215</div>
              </div>
            </div>
          </div>
          <div class="c">ccc$count</div>
        </div>
      </body>
    </html>
    
    <xsl:copy>
      <xsl:apply-templates select="@* | div[@class='b']  | text()" />
      <xsl:apply-templates select="div[@class='c']" />
    

    请只选择相关标签。您的问题不是关于,您使用的工具甚至不支持XQuery。您的XSLT是否遗漏了什么,因为它目前只输出
    ccc
    而不输出
    ccc$count
    ?对不起,这是本网站的新功能,对XSLT、XQuery、xpath等非常陌生。我现在才看到您的通知。谢谢你,我已经注意到了,并且按照要求修改了所有标签。请只选择相关标签。您的问题不是关于,您使用的工具甚至不支持XQuery。您的XSLT是否遗漏了什么,因为它目前只输出
    ccc
    而不输出
    ccc$count
    ?对不起,这是本网站的新功能,对XSLT、XQuery、xpath等非常陌生。我现在才看到您的通知。谢谢,我已经注意到了,并且按照要求通过我的帖子更正了所有标签。