Попытка удалить конечный пробел из атрибута ID с помощью XSL apply-template - PullRequest
0 голосов
/ 22 ноября 2011

Вот основной 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 в качестве места назначения гиперссылки, он не работает. Если мы ищем и удаляем завершающий пробел, идентификатор работает нормально. Возможно, это что-то простое, но я не могу понять это.

1 Ответ

1 голос
/ 22 ноября 2011
<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>

Примечание:

  • xmlns="http://www.w3.org/1999/xhtml" в <xsl:stylesheet>: помещает все элементы в выводе в пространство имен XHTML
  • translate(...): атрибуты идентификатора типа вXHTML не может содержать / символов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...