Почему этот код XSLT отображает все значения атрибута, а не только значение атрибута модели? - PullRequest
0 голосов
/ 01 апреля 2020

My XML

<cars>
    <car model="Focus" manufacturer="Ford" year="2000" />
    <car model="Golf" manufacturer="Volkswagen" year="1999" />
    <car model="Camry" manufacturer="Toyota" year="1999" />
    <car model="Civic" manufacturer="Honda" year="2000" />
    <car model="Prizm" manufacturer="Chevrolet" year="2000" />
</cars>

My XSLT (Почему он выбирает все атрибуты автомобильного узла, когда я только что указал узел модели?

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

<xsl:template match="car">
    <xsl:apply-templates select="@*" />
</xsl:template>

<xsl:template match="@model">
    <xsl:value-of select="." />
</xsl:template>

1 Ответ

2 голосов
/ 01 апреля 2020

Поскольку XSLT имеет встроенных шаблонных правил , которые применяются при отсутствии явного шаблона. Встроенный шаблон для атрибутов:

<xsl:template match="@*">
  <xsl:value-of select="."/>
</xsl:template>

, что совпадает с вашим явным шаблоном для атрибута model, поэтому все атрибуты в конечном итоге обрабатываются одинаково.

Если вам нужен только атрибут model, попробуйте:

<xsl:template match="car">
    <xsl:apply-templates select="@model" />
</xsl:template>

Обратите внимание, что два других ваших шаблона являются избыточными, так как они точно так же, как встроенный шаблон для элементов.

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