Повторно использовать шаблон xslt для форматирования элементов xml - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть XML-файл

<catalog>
  <s1>
    <cd>
      <title>TRACK A</title>
      <artist>ARTIST A</artist>
    </cd>
  </s1>
  <s2>
    <cd>
      <title>TRACK B</title>
      <artist>TRACK B</artist>
    </cd>
  </s2>
  <s3>
    <cd>
      <title>TRACK C</title>
      <artist>ARTIST C</artist>
    </cd>
    <cd>
      <title>TRACK D</title>
      <artist>ARTIST D</artist>
    </cd>
  </s3>
</catalog>

Я пытаюсь настроить шаблоны для форматирования элементов s1 и s3 одинаково, но по-разному форматировать элементы s2.

xslt Ihave is

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

  <xsl:for-each select="catalog/s1">
    <xsl:call-template name="style1"/> 
  </xsl:for-each>

  <xsl:for-each select="catalog/s2">
    <xsl:call-template name="style2"/>    
  </xsl:for-each>

  <xsl:for-each select="catalog/s3">
    <xsl:call-template name="style1"/> 
  </xsl:for-each>

</xsl:template>

<xsl:template match="cd" name="style1">
  <b><xsl:value-of select="title" /></b>
  <b><xsl:value-of select="artist" /></b>
</xsl:template>

<xsl:template match="cd" name="style2">
  <i><xsl:value-of select="title" /></i>
</xsl:template>

</xsl:stylesheet>

Но он не производит никакого вывода.Я думаю, что мне нужно, но это, кажется, вызывает «стиль 1» независимо от того.

Почему это не производит вывод?

Спасибо

Райан

1 Ответ

2 голосов
/ 14 сентября 2011

Вставьте " cd / " в выбранные операторы:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

  <xsl:for-each select="catalog/s1">
    <xsl:call-template name="style1"/> 
  </xsl:for-each>

  <xsl:for-each select="catalog/s2">
    <xsl:call-template name="style2"/>    
  </xsl:for-each>

  <xsl:for-each select="catalog/s3">
    <xsl:call-template name="style1"/> 
  </xsl:for-each>

</xsl:template>

<xsl:template match="cd" name="style1">
  <b><xsl:value-of select="cd/title" /></b>
  <b><xsl:value-of select="cd/artist" /></b>
</xsl:template>

<xsl:template match="cd" name="style2">
  <i><xsl:value-of select="cd/title" /></i>
</xsl:template>

</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...