Как различить два шаблона в XSL? - PullRequest
2 голосов
/ 25 мая 2011

Вот что я пытаюсь сделать в XSL:

<xsl:apply-templates select="document('a.xml')//row"/>
<xsl:apply-templates select="document('b.xml')//row"/>

<xsl:template match="row">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row">
  <!-- for document b.xml -->
</xsl:template>

Не работает, как сейчас, по понятным причинам.Как я могу дифференцировать эти два шаблона?Документ a.xml и b.xml абсолютно идентичны с точки зрения структуры XML.

Ответы [ 2 ]

5 голосов
/ 25 мая 2011

Используйте атрибут mode .

<xsl:apply-templates select="document('a.xml')//row" mode="a"/>
<xsl:apply-templates select="document('b.xml')//row" mode="b"/>

<xsl:template match="row" mode="a">
  <!-- for document a.xml -->
</xsl:template>

<xsl:template match="row" mode="b">
  <!-- for document b.xml -->
</xsl:template>
4 голосов
/ 25 мая 2011

Вы можете использовать атрибут mode как предложено, хотя это означает, что решение принимается частично на уровне xsl: apply-templates и частично самим правилом шаблона.Если вы хотите, чтобы элемент управления находился исключительно в шаблонном правиле, вы можете использовать шаблоны соответствия

row[(/) is document('a.xml')]
row[(/) is document('b.xml')]

(Если вы все еще используете XSLT 1.0, замените "A is B" на "generate-id(A) = generate-id(B)")

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