首页 > 解决方案 > 关于使用 XSLT 优化 XML 循环的建议

问题描述

我有一个问题,我需要遍历很多行并格式化每行中与单词 item 相对应的特定项目。

我能够循环并弄清楚如何应用格式。但我的问题是:当我应用 XSLT 转换时,该项目出现在行尾。

下面我已经包含了我的代码。
我正在使用 XML 函数for-eachvalue-of并且if.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL    /Transform">
  <xsl:template match="/"> 
    <html>
      <body> 
        <h2>Title</h2> 
          <xsl:for-each select="song/l"> 
             <p> 
               <xsl:value-of select="current()"/>
               <xsl:if test="verb">
                  <span style="color:#ff0000"> 
                    <i><xsl:value-of select="verb"/></i>
                 </span>
               </xsl:if>              
            </p>   
          </xsl:for-each>    
        </body>
    </html> 
  </xsl:template> 
</xsl:stylesheet> 

我的输入是:

<?xml version="1.0" encoding="UTF-8"?>

<song> 
   <l n="1">The fox <verb>jumps</verb> up high</l> 
   <l n="2">The frog is greener than a forest.</l> 
</song>

我希望实现的是:
例如,在诸如

"The Brown fox jumps up high"

这个词jump被标记为动词,应该用不同的颜色和斜体。

我的代码现在显示

"The Brown fox jumps up high. jumps" 

格式正确。
我需要它来保持跳跃在同一条线上的位置。
任何帮助或建议表示赞赏。

标签: xmlxsltxslt-1.0

解决方案


这实际上只是将适当的模板应用于各种元素的简单案例,如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/"> 
    <html>
      <body> 
        <h2>Title</h2>
        <xsl:apply-templates select="song/l"/>
      </body>
    </html> 
  </xsl:template> 

  <xsl:template match="verb">
    <span style="color:#ff0000; font-style:italic;">
      <xsl:apply-templates/>
    </span>
  </xsl:template>

  <xsl:template match="l">
    <p>
      <xsl:apply-templates/>
    </p>
  </xsl:template>
</xsl:stylesheet>

(我稍微调整了它以使用font-style:italic;而不是<i/>元素,但您可以轻松地将<i>just 放在跨度内)


推荐阅读