Оптимизация <xsl: apply-templates /> для набора тегов - PullRequest
2 голосов
/ 13 апреля 2010

Как можно уменьшить эту запись?

<xsl:template match="BR">
    <br/>
</xsl:template>

<xsl:template match="B">
    <strong><xsl:apply-templates /></strong>
</xsl:template>

<xsl:template match="STRONG">
    <strong><xsl:apply-templates /></strong>
</xsl:template>

<xsl:template match="I">
    <em><xsl:apply-templates /></em>
</xsl:template>

<xsl:template match="EM">
    <em><xsl:apply-templates /></em>
</xsl:template>

<xsl:template match="OL">
    <ol><xsl:apply-templates /></ol>
</xsl:template>

<xsl:template match="UL">
    <ul><xsl:apply-templates /></ul>
</xsl:template>

<xsl:template match="LI">
    <li><xsl:apply-templates /></li>
</xsl:template>

<xsl:template match="SUB">
    <sub><xsl:apply-templates /></sub>
</xsl:template>

<xsl:template match="SUP">
    <sup><xsl:apply-templates /></sup>
</xsl:template>

<xsl:template match="NOBR">
    <nobr><xsl:apply-templates /></nobr>
</xsl:template>

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Может быть что-то вроде:

<xsl:template match="LI|SUB|...">
   <xsl:element name="{translate(name(),
          'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')}">
    <xsl:apply-templates/>
   </xsl:element>
</xsl:template>

Не думаю, что в XSLT есть функция tolower (по крайней мере, в 1.0)

1 голос
/ 13 апреля 2010

Если создаваемые элементы заранее неизвестны, и нужно обработать только несколько известных элементов другим, более конкретным способом, вот более динамичное решение :

 <xsl:template match="*">
  <xsl:element name="{translate(name(), $vUpper, $vLower)}">
    <xsl:apply-templates select="node()|@*"/>
  </xsl:element>
 </xsl:template>

, где $vUpper и $vLower определены как:

<xsl:variable name="vUpper" select=
 "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 "/>

<xsl:variable name="vLower" select=
 "'abcdefghijklmnopqrstuvwxyz'
 "/>

Должны быть шаблоны, соответствующие нескольким известным элементам, которые не должны обрабатываться описанным выше способом. Эти более конкретные шаблоны переопределяют более общий шаблон выше. Например:

 <xsl:template match="specificName">
   <!-- Specific processing here -->
 </xsl:template>

Кроме того, общий шаблон выше, соответствующие элементы должны переопределять «правило идентификации» (шаблон).

...