2

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

假设下面的源代码是一个片段,它将成为完整 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>
4

3 回答 3

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>标记的内容。身份转换将输出所需的标签。

于 2013-05-07T22:56:52.123 回答
0

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

<xsl:template match="/">
      <xsl:for-each select="head/*">
        <xsl:copy-of select="."/>
      </xsl:for-each>
    </xsl:template>
于 2013-05-07T17:59:22.470 回答
0

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

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

于 2013-05-07T18:00:15.890 回答