【发布时间】:2016-09-25 18:46:17
【问题描述】:
我有以下 XSLT 2.0 代码将 XHTML 文件拆分为章节:
<xsl:for-each-group
select=".//html:*[local-name() eq $chapter-tag][1]/(.|following-sibling::*)"
group-starting-with="html:*[local-name() eq $chapter-tag]">
...
</xsl:for-each-group>
(这里$chapter-tag 是h1 或h2)。
但此代码不适用于以下 XHTML 片段:
<div class="header">
<h1>Header</h1>
</div>
<p>...</p>
...
当标题被“埋”在其他标签中时,请帮助做正确的事情。
完整示例:
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<div class="container">
<div class="header">
<h1>First chapter</h1>
</div>
<p>First chapter text.</p>
<p>Blah, blah, blah...</p>
<div class="header">
<h1>Second chapter</h1>
</div>
<p>Second chapter text.</p>
<p>Blah, blah, blah...</p>
</div>
</body>
</html>
这应该创建以下元素组(“章节”):
<div class="header">
<h1>First chapter</h1>
</div>
<p>First chapter text.</p>
<p>Blah, blah, blah...</p>
和
<div class="header">
<h1>Second chapter</h1>
</div>
<p>Second chapter text.</p>
<p>Blah, blah, blah...</p>
【问题讨论】:
-
考虑显示输入样本和相应输出样本的最小但完整的 sn-ps,以便我们了解您想要实现的目标。
-
@MartinHonnen 添加了一个示例
-
看来我需要先找到所有
h1(或h2)标签中最深的共同祖先。但是那该怎么办呢? -
我还没有想出如何找到最深的共同祖先
-
在问题的例子中,最深的共同祖先是
<div class="container">