通过XSL简单地取消格式化HTML文件
我四处寻找通过XSL取消平台的过程,但没有一个真正适合我,尽管我相信我的情况非常简单。我有一个HTML的集合,总是相同的结构,我想通过XSL转换来解冻。基本上,它是关于将通过XSL简单地取消格式化HTML文件,html,xml,xslt,tei,Html,Xml,Xslt,Tei,我四处寻找通过XSL取消平台的过程,但没有一个真正适合我,尽管我相信我的情况非常简单。我有一个HTML的集合,总是相同的结构,我想通过XSL转换来解冻。基本上,它是关于将元素封装在之后的所有元素,直到下一个
元素封装在
之后的所有元素,直到下一个
[…页面上的一些内容]
一些文本
副标题1
第一部分的第一段,包括一些内部内容和其他内容
嵌套元素,在多个级别上
内部带有- 的列表
第一部分第二段
第一部分第三段
副标题2
第二部分第一段
第二部分第二段
副标题3
[等等……]
我想把这变成:
<div n='section1'>
<head>Subtitle 1</head>
<p>First paragraph of part 1, with some <span>Inside</span> and other and other
nested elements, on multiple levels</p>
<ul>a list with <li> inside</ul>
<p>Second paragraph of part 1</p>
<picture source='xyz.jpg'/>
<p>Third paragraph of part 1</p>
</div>
<div n="section2">
<head>Subtitle 2</head>
<p>First paragraph of part 2</p>
<p>Second paragraph of part 2</p>
</div>
<div n="Section 3">
<head>Subtitle 3</head>
[and so on…]
副标题1
第1部分第一段,包含一些内部和其他
嵌套元素,在多个级别上
内部带有- 的列表
第一部分第二段
第一部分第三段
副标题2
第二部分第一段
第二部分第二段
副标题3
[等等……]
我找不到解决这个问题的办法。此外,如果第一步只是取消HTML文件的框架(严格复制div中的元素而不进行转换),那么这已经很了不起了
提前谢谢 这是一个典型的位置分组问题。要开始,请执行以下操作:
<xsl:template match="body">
<body>
<xsl:for-each-group select="*" group-starting-with="p[@class='subtitle']">
<xsl:choose>
<xsl:when test="@class="subtitle">
<div n="section{position()}">
<head>{.}</head>
<xsl:apply-templates select="tail(current-group())"/>
</div>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</body>
</xsl:template>
您的处理器是否支持XSLT 2.0?是的,它支持XSLT 2.0–由于下面的答案,我们刚刚发现了分组的可能性!非常感谢–我被XSLT1.0困住了。