Это моя трансформация:Почему не самый специализированный шаблон матч в XSLT
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<output>
<xsl:apply-templates select="outer[@type='foo']/inner"/>
</output>
</xsl:template>
<xsl:template match="outer[@type='foo']/inner[@type='bar1' or @type='bar2' or @type='bar3' or @type='bar4']">
<item>
<xsl:value-of select="text()"/>
</item>
</xsl:template>
<xsl:template match="outer[@type='foo']/inner">
<xsl:message terminate="yes">
<xsl:value-of select="concat('Unexpected type: ', @type)"/>
</xsl:message>
</xsl:template>
</xsl:transform>
Это мой вход:
<root>
<outer type="foo">
<inner type="bar2">bar2</inner>
</outer>
</root>
Когда я выполнить преобразование на входе, Xalan завершает работу с фатальная ошибка, вызванная <xsl:message terminate="yes">
в третьем <xsl:template>
. Зачем? Не следует ли вместо второго, более специализированного матча <xsl:template>
?
Явное определение приоритета кажется самым чистым исправлением, спасибо! – flyx