Я бы хотел переименовать и переместить узел на один уровень вверх, если значением узла является определенное значение.
Пока я написал это:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="stock/images/image[main_image = 1]">
<primary>
<xsl:apply-templates />
</primary>
</xsl:template>
</xsl:stylesheet>
Ввод:
<root>
<stock>
<code>Apple</code>
<images>
<image>
<img_file>1.jpg</img_file>
<main_image>1</main_image>
</image>
<image>
<img_file>2.jpg</img_file>
<main_image>0</main_image>
</image>
</images>
</stock>
</root>
Вывод:
<root>
<stock>
<code>Apple</code>
<images>
<primary>
<img_file>1.jpg</img_file>
<main_image>1</main_image>
</primary>
<image>
<img_file>2.jpg</img_file>
<main_image>0</main_image>
</image>
</images>
</stock>
</root>
Это почти хорошо, но я бы хотел переместить <primary>
узел на один уровень вверх, за пределы <images>
, например:
<root>
<stock>
<code>Apple</code>
<primary>
<img_file>1.jpg</img_file>
<main_image>1</main_image>
</primary>
<images>
<image>
<img_file>2.jpg</img_file>
<main_image>0</main_image>
</image>
</images>
</stock>
</root>