xslt将1个html拆分为n个html

xslt将1个html拆分为n个html,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>
      <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>
        </div>
      </div>
    </div>
  </body>
</html>
然而,我的a.xslt并不仅仅提取div class=“c”的第i次(在本例中是第一次或第二次)出现


如何修改它以获得正确的结果

提前感谢您的帮助。

使用

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:param name="occurrence"/>

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

 <xsl:template match="div[@class='c']">
   <xsl:variable name="pos">
     <xsl:number count="div[@class = 'c']"/>
   </xsl:variable>
   <xsl:if test="$pos = $occurrence">
     <xsl:copy-of select="."/>
   </xsl:if>
 </xsl:template>

</xsl:stylesheet>

如果需要继续使用当前方法,只需更改调用
select=“div[@class='c']

致:


如果您只对XSLT感兴趣,为什么会将其标记为
xquery
?-1,以防随后的标签滥用(我在几个小时前就已经删除了标签,并留下了一个通知)。不要使用错误的标签,应用错误的标签提醒(和烦恼)对你的问题不感兴趣的人。哦,对不起,这个网站是新来的。我不知道顶部栏上的通知计数器。我现在可以看到了。谢谢你遗漏的部分:)谢谢你的更正,非常感谢(我仍在通过xslt找到我的方法)谢谢你的建议,马丁。我已经使用了第一个答案中的建议,但是我可以看到你在那里做什么。非常感谢。
<html>
  <body>
    <div class="a">aaa
      <div class="b">bbb</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>
        </div>
      </div>
    </div>
  </body>
</html>
#!/bin/bash
for i in {1..2}
do
  xsltproc --param occurrence ${i} a.xslt a.html > a_${i}.html
done
<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="occurrence"/>

 <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']  | text()" />
   <xsl:apply-templates select="div[@class='c']" />
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:param name="occurrence"/>

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

 <xsl:template match="div[@class='c']">
   <xsl:variable name="pos">
     <xsl:number count="div[@class = 'c']"/>
   </xsl:variable>
   <xsl:if test="$pos = $occurrence">
     <xsl:copy-of select="."/>
   </xsl:if>
 </xsl:template>

</xsl:stylesheet>
<xsl:apply-templates select="div[@class='c'][position()=$occurrence]" />
<xsl:template match="div[@class='a']">
    <xsl:copy>
        <xsl:apply-templates select="@* | div[@class='b']  | text()" />
        <xsl:apply-templates select="div[@class='c'][position()=$occurrence]" />
    </xsl:copy>
</xsl:template>