Использование шаблонов для определения поведения определенных элементов
<!-- after standard identity template -->
<xsl:template match="description">
<xsl:element name="newprice">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="p">
<xsl:apply-templates/>
</xsl:template>
Первый шаблон говорит, что нужно поменять description
на newprice
. Второй говорит игнорировать элемент p
.
Если вы не знакомы с шаблоном идентификации, посмотрите здесь , чтобы найти несколько примеров.
РЕДАКТИРОВАТЬ : Учитывая новый пример, мы видим, что вы хотите извлечь только элемент описания и его содержимое. Обратите внимание, что действие шаблона начинается с шаблона match="/"
. Мы можем использовать этот элемент управления там, где начинается наша таблица стилей, и таким образом пропустить большую часть риффрафа, который мы хотим отфильтровать.
измените <xsl:template match="/">
на что-то более похожее на:
<xsl:template match="/">
<xsl:apply-templates select="//description"/>
<!-- use a more specific XPath if you can -->
</xsl:template>
Итак, в целом наше решение выглядит так:
<xsl:stylesheet
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
exclude-result-prefixes="xs">
<xsl:template match="/">
<xsl:apply-templates select="//description" />
</xsl:template>
<!-- this is the identity template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="description">
<xsl:element name="newprice">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="p">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>