使用XSLT从xhtml文件中获取所有元素

时间:2011-03-16 20:00:59

标签: xhtml xslt

我有一个xhtml文件,我试图转换为:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"    "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>yada</title>
    <meta.....>
</head>
<body>
    <p>Something</p>
    <p>awesome</p>
</body>
</html>

成为

<title>yada</title>
<meta.....>

<p>Something</p>
<p>awesome</p>

我所关注的关键是从文档中删除<head><body>标记。我不想通过sed或awk来删除它们。

我尝试过的所有东西都有html中的全部内容或将其全部转换为纯文本。

关于问题的背景:我有一个用multimarkdown编写的博客备份,我希望将它们放到不同的格式中,但我需要先解决这个问题。

注意:我开始使用identity template

3 个答案:

答案 0 :(得分:1)

这样的事情? (忍受我,自从我积极完成XSL以来已经很久了)

<xsl:for-each select="head">
  <xsl:copy-of select="."/>
</xsl:for-each>

<xsl:for-each select="body">
  <xsl:copy-of select="."/>
</xsl:for-each>

答案 1 :(得分:1)

听起来您希望htmlbody下面的所有内容都进行身份转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/html|/html/head|/html/body">            
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

答案 2 :(得分:1)

您确定这不是通常的命名空间问题吗?输入是否真的像你向我们展示的那样,或者你是否遗漏了命名空间,因为你没有意识到它们有所不同?