使用XSLT提取HTML元素

时间:2013-05-07 17:33:34

标签: html xslt

我想在html页面中的<head>标记元素之间提取所有内容。包括链接标记和脚本标记。

假设下面的源代码是一个片段,它将是完整的html文档的一部分。

来源:

...
<head>
 <link rel="stylesheet" href="style.css"
    type="text/css" media="handheld" />

 <link rel="stylesheet" href="style.css"
    type="text/css" media="handheld" />

 <script type="text/javascript" src="main.js"></script>
 <script type="text/javascript" src="second.js"></script>
</head>
...

XSLT:     

<xsl:output method="xml" encoding="utf-8" indent="no"/>

<xsl:template match="/">
    <xsl:copy-of select="link"/>
</xsl:template>

如果我只想获得一个标签,这样可以正常工作。有没有办法可以处理所有内容,只处理“head”标签之间的所有内容。

我期望的输出是:

 <link rel="stylesheet" href="style.css"
    type="text/css" media="handheld" />

 <link rel="stylesheet" href="style.css"
    type="text/css" media="handheld" />

 <script type="text/javascript" src="main.js"></script>
 <script type="text/javascript" src="second.js"></script>

3 个答案:

答案 0 :(得分:2)

您需要使用XSL 身份转换

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

以及阻止输出您不想要的所有内容的模板。

<xsl:template match="/">
  <xsl:apply-templates select="html/head"/>
</xsl:template>

第二个模板更具体,将与根匹配,然后将样式表应用于<head>标记的内容。身份变换将输出所需的标签。

答案 1 :(得分:0)

您需要使用'xsl:for-each'语句

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

答案 2 :(得分:0)

我猜你可以使用<xsl:for-each>元素来选择指定节点集的每个XML元素。

只需遍历head标记内的所有元素,然后使用xsl-current()函数以这样的方式获取每个元素的值; <xsl:value-of select="current()"/>