Estou tentando extrair um subconjunto de algum HTML de um arquivo maior e, em seguida, realizar algumas transformações no resultado. Fiz alguns progressos, mas faltam uma ou duas peças para fazer este trabalho conforme desejado.
Aqui está uma versão bastante simplificada do XHTML que desejo transformar:
<html>
<head>
<!-- lots of stuff I don't care about -->
</head>
<body>
<div>
<!-- lots of stuff I don't care about -->
<div>
<!-- lots of stuff I don't care about -->
<div id="key_div">
<div id="ignore_this">
<!-- lots of stuff I don't care about -->
</div>
<p>More junk I don't want</p>
<p>Even more junk I don't want</p>
<h2><span class="someClass" id="someID">Header</span></h2>
<p>Stuff I want to keep</p>
<!-- A lot of stuff I want to keep -->
<p>More stuff I want to keep</p>
<ul>
<li><a href="/some/old/path">Fun Place</a></li>
<li><a href="/some/old/other">Better Place</a></li>
</ul>
</div>
<!-- lots of stuff I don't care about -->
</div>
<!-- lots of stuff I don't care about -->
</div>
</body>
</html>
Quero extrair tudo da <h2>
tag até o restante do conteúdo dentro do <div>
com o id
of "key_div"
. Mas também quero transformar o <h2>
em um mais simples <h1>
e preciso modificar os href
s da lista. O resultado final deverá ficar assim:
<html>
<head>
<!-- My own header stuff -->
</head>
<body>
<h1>Header</h1>
<p>Stuff I want to keep</p>
<!-- A lot of stuff I want to keep -->
<p>More stuff I want to keep</p>
<ul>
<li><a href="/new/path">Fun Place</a></li>
<li><a href="/new/other">Better Place</a></li>
</ul>
</body>
</html>
Consegui fazer a maior parte da extração básica sem nenhuma das transformações desejadas usando o seguinte XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="x">
<xsl:output indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<html>
<head>
<title>My Title</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="div[@id='key_div']/*">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="div[@id='ignore_this']"/>
<xsl:template match="text()"/>
</xsl:stylesheet>
Isto resulta em:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>My Title</title>
</head>
<body>
<p>More junk I don't want</p>
<p>Even more junk I don't want</p>
<h2><span class="someClass" id="someID">Header</span></h2>
<p>Stuff I want to keep</p>
<p>More stuff I want to keep</p>
<ul>
<li><a href="/some/old/path">Fun Place</a></li>
<li><a href="/some/old/other">Better Place</a></li>
</ul>
</body>
</html>
Não sei como remover as coisas antes do arquivo <h2>
.
Não sei como me transformar <h2><span class="someClass" id="someID">Header</span></h2>
ou <h1>Header</h1>
como transformar o href
s. Todas as minhas tentativas de combinar uma transformação com a extração geralmente acabam sem conteúdo.
Haverá algumas outras transformações que preciso realizar, mas por enquanto vou me concentrar neste exemplo para começar. Menciono isso para que quaisquer respostas possíveis não impeçam quaisquer outras transformações possíveis.