【发布时间】:2010-10-14 23:31:50
【问题描述】:
我需要对一些结构不好的 HTML 进行后处理——例如
<html>
<body>...</body>
<body>...</body>
</html>
转换此 HTML 以使第二个正文的内容出现在第一个正文中的最佳方法是什么,当然除了额外的正文标记之外?我不想用这条规则来操纵其他任何东西。
我曾想过匹配 html 标记并使用显式的 apply-templates 调用从那里处理它,但对我来说似乎有点草率。我知道如何匹配虚假主体(“body[position() > 1]”),但我想了解如何最好地编写转换。
编辑:我确实需要将其他模板应用于所有这些元素的子元素,因此简单的副本将不起作用。
我想保留 cmets 和处理指令。我几乎希望将整个文档作为身份转换,除了这些多个主体和一些其他小的编辑,我已经成功地做到了。
编辑 2:在上面的示例中,保留第二个 body 元素的子元素很重要。它们应该是输出中第一个 body 标记的子节点,位于第一个 body 标记的子节点的末尾。
编辑 3:这是一些说明性的输入/输出(未检查有效性):
<html>
<!-- Look at my comments -->
<head>
<title>My title!</title>
<!-- Commentary -->
</head>
<body>
<p>Something <b>bold</b></p>
</body>
<body>
<!-- heh -->
<p>Some bozo put my parent in here.</p>
</body>
<body>
<p>More stuff here</p>
</body>
</html>
需要:
<html>
<!-- Look at my comments -->
<head>
<title>My title!</title>
<!-- Commentary -->
</head>
<body>
<p>Something <b>bold</b></p>
<!-- heh -->
<p>Some bozo put my parent in here.</p>
<p>More stuff here</p>
</body>
</html>
【问题讨论】: