尝试使用XSL apply-template从ID属性中删除尾随空格

时间:2011-11-22 16:39:49

标签: xml xslt

这是基本的XSL。我试图提取元素q_DECISION_NUMBER并使用它来创建数据元素和ID属性。但是数据元素包含空格,因此也会拾取空格并生成:id =“23-7 / 16”

我尝试使用normalize-space()和translate(),但在这种情况下都不起作用。

有人有建议吗?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="UTF-8" 
             doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

 <xsl:template match="/">

  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <title>Untitled Document</title>

  </head>

  <body>
  <xsl:apply-templates select="Root"/>

  </body>
  </html>

 </xsl:template>

 <xsl:template match="q_DECISION_NUMBER">
  <h2 class="q_DECISION_NUMBER"><xsl:attribute name="id">d<xsl:apply-templates/>   
  </xsl:attribute><xsl:apply-templates/></h2>
  </xsl:template>

</xsl:stylesheet>

以下是一些包含典型数据的示例xml,而不是整个XML源:

<Root><DECISION><q_DECISION_NUMBER>1-1/1 </q_DECISION_NUMBER></DECISION>
<DECISION><q_DECISION_NUMBER>1-1/2 </q_DECISION_NUMBER></DECISION>
<DECISION><q_DECISION_NUMBER>1-1/3 </q_DECISION_NUMBER></DECISION>
</Root>

请注意上面数据元素中的空格。 ID属性正在拾取此空白,但如果我们使用ID作为超链接目标,则它不起作用。如果我们搜索并删除尾随空格,则ID工作正常。这可能很简单,但我无法弄清楚。

1 个答案:

答案 0 :(得分:1)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method="html" encoding="UTF-8" 
              doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
              doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

  <xsl:template match="/">

    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Untitled Document</title>
      </head>

      <body>
        <xsl:apply-templates select="Root"/>
      </body>
    </html>

  </xsl:template>

  <xsl:template match="q_DECISION_NUMBER">
    <h2 class="q_DECISION_NUMBER" id="{concat('d', 
                                      translate(normalize-space(.), '/', '-'))}">
      <xsl:apply-templates/>
    </h2>
  </xsl:template>

</xsl:stylesheet>

注意:

    <{1}}上的
  • xmlns="http://www.w3.org/1999/xhtml":将输出中的所有元素放在XHTML命名空间中
  • <xsl:stylesheet>:XHTML中的ID类型属性不允许包含translate(...)个字符