如何在转换为HTML时使用XSLT在xml节点的字符串中加粗特定子字符串

时间:2016-03-10 12:23:59

标签: xml xslt

我必须在XML节点的字符串中呈现某个子字符串粗体,并在使用XSLT转换XML文件时更改html文件中的颜色。我正在使用Vi sual studio 12.0并且无法使用像tokenize(),analyze-string()等XSLT 2.0功能,而且我是XSLT的新手。

以下是XMLNode:

<LogMsg>
   Not able to do the given task as expected because of this **{reason}**.Please verify it.
</Logmsg>

我必须在以HTML格式呈现时以粗体和红色显示花括号中的消息。

以下是我们的应用程序中使用的XSLT代码的一部分:

<xsl:for-each select="./LogMsg">                
   <pre>    
      <xsl:value-of select="."/>                         
   </pre>
</xsl:for-each>              

在这方面的任何帮助都非常感谢。

此致 Nagasree。

1 个答案:

答案 0 :(得分:0)

如果

  1. LogMsg的值始终是字符串(没有子元素)和
  2. 字符串中只有一部分必须用彩色簧片包裹并用大括号包裹,
  3. 必须涂成红色并用大括号括起来的部分始终以**(开头,然后是)**
  4. 然后可以直接隔离字符串的相关部分:

    <xsl:template match="LogMsg">
      <xsl:variable name="s1" select="substring-before(.,'**(')"/>
      <xsl:variable name="s2" 
          select="substring-before(substring-after(.,'**('),')**')"/>
      <xsl:variable name="s3" select="substring-after(.,')**')"/>
      <pre>
        <xsl:value-of select="$s1"
        /><xsl:text>**(</xsl:text
        ><b style="color: red;"
        ><xsl:value-of select="$s2"
        /><xsl:text>)**</xsl:text
        ><xsl:value-of select="$s3"/>
      </pre>
    </xsl:template>
    

    如果输入中不存在**()**,但LogMsg始终以“由于此而无法按预期执行给定任务”开头,并以“.Please验证结束”。 “。然后,使用substring-before()和substring-after()来隔离消息的中间部分同样简单。我将把细节作为练习留给读者。

    如果这些假设都不成立,那么您的问题可能需要澄清。