Допустим, у меня есть XML-документ, как это:Использование XSLT Apply-шаблоны условно выберите узлы
<director>
<play>
<t>Nutcracker</t>
<a>Tom Cruise</a>
</play>
<play>
<t>Nutcracker</t>
<a>Robin Williams</a>
</play>
<play>
<t>Grinch Stole Christmas</t>
<a>Will Smith</a>
</play>
<play>
<t>Grinch Stole Christmas</t>
<a>Mel Gibson</a>
</play>
</director>
Теперь я хочу, чтобы иметь возможность выбрать все пьесы с Уиллом Смитом в качестве актера и переформатировать его в что-то вроде этого:
<Plays>
<Play title="Grinch Stole Christmas">
<star>Will Smith</star>
<star>Mel Gibson</star>
</Play>
</Plays>
Я только хочу, чтобы использовать применяемые-шаблоны .. Нет XSL: если или для каждой петли (я умудрилась этот пример в качестве более простой версии того, что я делаю, так что вы можете мне помочь понять, как использовать xpath в заявлении соответствия)
Вот то, что я до сих пор:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/director">
<Plays>
<xsl:apply-templates select="play"/>
</Plays>
</xsl:template>
<xsl:template match="play[a='Will Smith']">
<play title="{data(t)[1]}">
<xsl:apply-templates select="a"/>
</play>
</xsl:template>
<xsl:template match="a">
<star>
<xsl:value-of select="."/>
</star>
</xsl:template>
</xsl:stylesheet>
В основном я просто уверен в том, как отфильтровать узлы с помощью XPath в атрибуте соответствия шаблона. Любая помощь будет замечательной!
Что делает то, что вы сделали до сих пор? –
Решение ниже было решено ... Спасибо за комментарий как минимум :) – Msencenb
Хороший вопрос, +1. См. Мой ответ на два эффективных решения :) –