xslt将1个html拆分为n个html
我有大量文件,其结构类似于以下a.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> &
<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>