如何使用xslt删除模式?

时间:2012-01-05 10:44:12

标签: xml xslt

我正在尝试使用xslt显示xml文件。在某些节点中,我有<code>标记之间的数据。我不希望显示代码标记。

所以如何使用xslt单独删除<code></code>标记。

我尝试了translate(),但它将模式视为单独的字符,因此所有c,o,d,e也都从xml内容中删除。

这是一个示例xml数据:

  <results>
  <result>
     <resultType>Error</resultType>
     <lineNum>3</lineNum>
     <columnNum>1</columnNum>
     <errorMsg>&lt;code&gt;script&lt;/code&gt; may cause screen flicker.&lt;</errorMsg>
   </result> 
   <result>   
    <resultType>Potential Problem</resultType>
    <lineNum>6</lineNum>
    <columnNum>2</columnNum>
    <errorMsg>&lt;code&gt;script&lt;/code&gt; user interface may not be accessible.&lt;
  </errorMsg>
 </result> 
 </results>

我的xslt:

    <table>
     <tr class="header">
      <th>Serial Number</th>
      <th>Line Number</th>
      <th>Error Message</th>
      <th>Decision Pass</th>

     </tr>
     <xsl:for-each select="results/result">
      <xsl:if test="resultType='Potential Problem'">
        <xsl:variable name="eMsg" select="errorMsg"></xsl:variable>
        <tr class="content">  

            <td><xsl:number format="1"/></td>

            <td><xsl:value-of select="lineNum"/></td>

            <td><xsl:value-of select="errorMsg" disable-output-escaping="yes"/></td>

        </tr>
      </xsl:if> 
    </xsl:for-each>
  </table>

disable-output-escaping =“yes”不适用于Firefox,因此尝试删除<code></code>代码

1 个答案:

答案 0 :(得分:1)

如果你想摆脱一个实际的XML元素,你可以使用这样的东西:

<xsl:template match="code">
  <xsl:apply-templates/>
</xsl:template>

(假设您有一个复制其他所有内容的身份模板:

<xsl:template match="@*|node()">
  <xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:template>

然而,看起来你所拥有的实际上是你要删除的文本。在这种情况下,xsl:analyze-string可能就是您所需要的:

<xsl:template match="errorMsg/text()">
  <xsl:analyze-string select="." regex="&amp;lt;code$amp;gt;(.*)&amp;lt;/code$amp;gt;">
    <xsl:matching-substring><xsl:value-of select="regex-group(1)"/></xsl:matching-substring>
    <xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

其他一些提示和意见:如果你在使用模板时使用for-each,你应该考虑后者。禁用 - 输出 - 转义是魔鬼,应该在99%的时间(或更多)避免使用。

希望能做到!