我有一个如下所示的XML表:
<!-- language: lang-xml -->
<table frame="all" colsep="1" rowsep="1">
<tgroup>
<colspec colname="col0" colwidth="1316"/>
<colspec colname="col1" colwidth="1316"/>
<colspec colname="col2" colwidth="1316"/>
<colspec colname="col3" colwidth="1316"/>
<colspec colname="col4" colwidth="1316"/>
<colspec colname="col5" colwidth="1316"/>
<colspec colname="col6" colwidth="1316"/>
<tbody>
<row>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
<entry>
<p/>
</entry>
</row>
</tbody>
</tgroup>
</table>
我希望它将它转换为HTML表格,我已经进行了XSL转换,但它没有复制空段落。 我想检查每个条目的内部,如果有空,则为&lt; p&gt;我想将其替换为'&lt; p&gt;&amp; nbsp;&lt; / p&gt;'如果它有一个textnode我想用&lt; p&gt;包围它还
这是条目的当前XSL:
<!-- language: lang-xsl -->
<xsl:template match="entry">
<td>
<xsl:for-each select="*" >
<xsl:choose>
<xsl:when test="self::text()[not(text()='')]" >
<p>
<xsl:apply-templates/>
</p>
</xsl:when>
<xsl:when test="self::text()[text()='']" >
<p>&nbsp;</p>
</xsl:when>
<xsl:when test="text()=''" >
<p>&nbsp;</p>
</xsl:when>
<xsl:when test="p[not(node())]" >
<p>&nbsp;</p>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</td>
</xsl:template>
我正在使用XSL 1.0,它没有给出我期望的结果。 基本上我得到一个空的&lt; td&gt;&lt; / td&gt;标签。 我该如何解决这个问题?
答案 0 :(得分:0)
查看其他模板会很有帮助。没有它,我们无法分辨这一部分的作用:
<p>
<xsl:apply-templates/>
</p>
假设它按预期工作,请尝试类似:
<xsl:template match="entry">
<td>
<xsl:choose>
<xsl:when test="p/node()">
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
或者(不依赖于其他模板):
<xsl:template match="entry">
<td>
<xsl:choose>
<xsl:when test="p/node()">
<xsl:copy-of select="p/node()"/>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
答案 1 :(得分:0)
不确定XSL的其余部分,但这部分可能有助于获得解决方案:
<xsl:template match="entry">
<td>
<xsl:apply-templates />
</td>
</xsl:template>
<xsl:template match="p">
<xsl:if test="not(text())"><p>&nbsp;</p></xsl:if>
<xsl:if test="text()">
<p><xsl:value-of select="text()" /></p>
</xsl:if>
</xsl:template>