我有以下xslt解析树。
<xsl:template match="div[@class='tr-summaryinfo']">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="p[@class='tr-summaryitem']">
<li>
<xsl:apply-templates/>
</li>
</xsl:template>
<xsl:template match="body">
<div id="storybodycontent">
<span class="storycontent">
<xsl:copy-of select="node()"/>
</span>
</div>
</xsl:template>
输入为:
<html test="http://www.w3.org/1999/xhtml">
<head>
<title>US STOCKS-PepsiCo, oil help extend Wall St rally; S&P at 4-month high</title>
</head>
<body>
<div class="tr-summaryinfo">
<p class="tr-summaryitem">Energy shares jump as oil gains on supply disruptions </p>
<p class="tr-summaryitem">PepsiCo's best day in 7 yrs on strong Q2</p>
<p class="tr-summaryitem">Nordstrom down on disappointing forecast</p>
<p class="tr-summaryitem">S&P 500 Q2 earnings growth seen at 21 pct -TR I/B/E/S</p>
<p class="tr-summaryitem">Tesla gains on plans to open new plant in Shanghai</p>
<p class="tr-summaryitem">Indexes up: Dow 0.56 pct, S&P 0.30 pct, Nasdaq 0.14 pct</p>
</div>
<p class="tr-advisory">Changes comment, adds details, updates prices</p><p class="tr-by">By Amy Caren Daniel</p><p class="tr-story-p1"><span class="tr-dateline">July 10 (Reuters)</span><span class="tr-dl-sep"> - </span>
我想在解析后保留一些标签。 BUt我当前的解析返回纯文本。
<div class="tr-summaryinfo">
和<p class="tr-summaryitem">
可以按预期进行转换,其余内容失去了以纯文本形式返回的标签。
<xsl:copy-of select="node()"/>
按原样返回所有标签,但会呕吐转换。
请帮助。**
答案 0 :(得分:0)
由于您需要保留输出中的某些标记,因此可以从identity transform template
开始,它将输入原样复制到输出中。
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
在匹配body
的模板中,使用<xsl:apply-templates>
代替<xsl:copy-of>
。
<xsl:template match="body">
<div id="storybodycontent">
<span class="storycontent">
<xsl:apply-templates />
</span>
</div>
</xsl:template>
完整的XSLT看起来像
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="body">
<div id="storybodycontent">
<span class="storycontent">
<xsl:apply-templates />
</span>
</div>
</xsl:template>
<xsl:template match="div[@class='tr-summaryinfo']">
<ul>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="p[@class='tr-summaryitem']">
<li>
<xsl:apply-templates />
</li>
</xsl:template>
</xsl:stylesheet>
这应该提供所需的输出。