Интервал преобразования XSL - PullRequest
2 голосов
/ 22 апреля 2009

Я использую Xsl-преобразование для отображения данных XML в виде HTML.

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ms="urn:schemas-microsoft-com:xslt"
 xmlns:util="urn:the-xml-files:xslt">
 <xsl:output method="xml" indent="yes"
  omit-xml-declaration="yes" encoding="utf-8"/>

 <xsl:template match="/">
     <xsl:for-each select="/Categories/Category">
       <li class="c">
         <a class="d">
          <xsl:attribute name="id">cat_<xsl:value-of select="categoryid"/></xsl:attribute>
         </a>
       </li>
     </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

Если выбор атрибута id элемента li не находится в одной строке, процессор XSL заполнит значение атрибута пробелом, что полностью нарушит JavaScript на внешнем интерфейсе.

Конечно, Visual Studio всегда будет переформатировать множество определений в одну строку, поэтому, если я что-то изменю, мне нужно удалить пробел вручную.

Как я могу удалить ненужные пробелы из элемента? Должен ли я сделать xsl: copy с xsl: strip-space, или есть какие-то лучшие решения? :)

Ответы [ 2 ]

4 голосов
/ 22 апреля 2009

Решение простое :

Вместо:

     <a class="d">
      <xsl:attribute name="id">cat_<xsl:value-of select="categoryid"/></xsl:attribute>
     </a>

Использование:

     <a class="d" id="cat_{categoryid}"/>
2 голосов
/ 22 апреля 2009

В дополнение к элегантному решению Димитра доступна следующая подробная версия:

<a class="d">
   <xsl:attribute name="id">
      <xsl:text>cat_</xsl:text>
      <xsl:value-of select="categoryid"/>
   </xsl:attribute>
</a>

Я упоминаю об этом только потому, что <xsl:text> часто упускается из виду и может быть весьма полезным. В любом случае XSL - это многословный язык.

...