如何使用xslt 1.0从主体中排除页脚元素内容

时间:2016-04-14 23:08:25

标签: xslt xslt-1.0

我有一个html页面,例如下面的

<html><head><title>test</title></head><body><div>test1</div><footer><div>test2</div></footer></body></html>

我已经编写了xslt 1.0来转换和提取标题和正文内容,但我的要求是单独忽略页脚内容并考虑正文内容中的所有其他元素值。怎么做到这一点?

<xsl:template match="/">
 <document >
  <xsl:copy-of select="@*" />
  <xsl:apply-templates select="html/head" />
  <xsl:apply-templates select="html/body" />
</document>
</xsl:template>
<xsl:template match="html/head">
<content name="title">
<xsl:value-of select="title" />
</content>
 </xsl:template>
<xsl:template match="html/body">
<content name="snippet">
<xsl:value-of select="viv:replace(viv:replace(.,'&lt;[^>]*>',' ', 'gi'),'&amp;nbsp;','','gi')"/>
</content>
</xsl:template>

1 个答案:

答案 0 :(得分:0)

问:如何使用xslt 1.0

从主体中排除页脚元素内容

如果这确实是你的问题,这应该回答数百次 具有标识转换的统计信息,并且具有要忽略的元素的空模板。

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

期待您的xlst让我们假设有一些 strange_other_things 请求。

在没有页脚的情况下对身体进行odd_other_things将结果形式的身份转移放入变量中。

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

  <!-- use $body but I'm out here -->
</xsl:template>

进一步猜测:使用viv:replace(.,'&lt;[^>]*>',' ', 'gi'),您尝试删除xml元素名称。这不起作用,因为.在文本上下文中使用,只返回当前节点内的所有文本。

因此,如果我说得对,那么这个问题就是一种欺骗性的。