使用转义字符无法正确显示的XSLT解析

时间:2014-06-17 13:25:12

标签: xml xslt

在当天的匆忙和挫折中,我显然没有发布足够的相关信息,因此我正在重新提出这个问题,我又在这里重新发布。感谢您的耐心,我已经尝试了其他一些逃避XSL链接的信息,但似乎无法正确地将这些方法付诸实践

我有一些XML正在返回以下标记:

etc...
<tr>
            <td class="Label Center">22</td>
            <td Indentation="4" class="Label Stub Left">Listings</td>
<tr>
   <td class="Label Center">23</td>
   <td Indentation="6" class="Label Stub Left">Notes&lt;sup&gt;1&lt;/sup&gt;</td>
</tr>
etc...

我按照以下方式处理它们,一切都很好,除了一件事:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:param name="TABLENUM"/>

<xsl:template match="/">
<xsl:for-each select="/Response/MakeStory/div/div[@class='Table'][$TABLENUM]">
    <h3 style="margin:2px; padding:0;"><xsl:value-of select="div [@class='TableTitle']"/></h3>
    <h4 style="margin:2px; padding:0;"><em><xsl:value-of select="div[@class='TableSubTitle']"/></em></h4>
    <xsl:for-each select="div[@class='HtmlTable']/table">
        <table cellpadding="3" cellspacing="0">
                          <xsl:copy-of select="thead"/>
                            <xsl:apply-templates select="tbody"/>
        </table>
    </xsl:for-each>
</xsl:for-each>
</xsl:template>


<xsl:template match="tbody">
  <xsl:copy>
    <xsl:apply-templates select="tr"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="tr">
    <xsl:copy>
      <xsl:apply-templates select="td"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="td[contains(@class, 'Left')]">
  <td align="left" style="padding-left: {@Indentation * 3}px;">
        <xsl:copy-of select="node()"/>            
  </td>
</xsl:template>

<xsl:template match="td[contains(@class, 'Center')]">
  <td align="center">
    <xsl:copy-of select="node()" />
  </td>
</xsl:template>

我在上面的示例中遇到的问题是,当输出项目时,转义标记被视为文字并写出注释&lt; sup&gt; 1&lt; / sup&gt;从字面上看,而不是像Notes 1 那样上标数字。

我已尝试过多种方式,包括将xsl文本转义字符设置为无缠绕节点,

类似的东西:

<xsl:text disable-output-escaping="yes"><xsl:copy-of select="node()" /><xsl:text />

你无法做到。

我尝试应用模板而不是使用select-node节点选项和一个选择条件来查找转义字符,但遗憾的是我没有运气。

处理此问题的最佳方法是什么。我确信这很简单,但我对XSLT的了解并不是很有效。任何信息,将不胜感激。

哦,我认为&#34;我有XSLT 2,但我不确定。

感谢。

1 个答案:

答案 0 :(得分:0)

应该有所帮助:

<xsl:template match="td[contains(@class, 'Center')]">
<td align="center">
   <xsl:apply-templates/>   
</td>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>