我想通过 xslt 使用 php 将 xml 文件转换为另一个文件。在输出上我需要一些调整,但我不知道如何调整我的 xsl 样式表。
谢谢你的帮助
需要对输出进行调整:
- 向类别元素添加动态计数,例如
<category1> <category2>
... - 将 PRODUCT/COLORS/COLOR/AVAILABLE_SIZE 的元素 SIZE 的所有内容添加到
<$color>
类似元素<green>S:M:L:XL</green> <orange>L:M</orange>
- 向图像元素添加动态计数,例如
<image1> <image2>
源代码:
<?xml version="1.0" encoding="utf-8"?>
<PRODUCTS>
<PRODUCT>
<CODE>19</CODE>
<NAME>daisy</NAME>
<MANUFACTURER>79</MANUFACTURER>
<DESCRIPTION>t-shirt</DESCRIPTION>
<SIZES></SIZES>
<PRICE>33.33</PRICE>
<PRICE_AKCIA>24.17</PRICE_AKCIA>
<CATEGORY_ID>42</CATEGORY_ID>
<CATEGORIES>
<CATEGORY>clothes</CATEGORY>
<CATEGORY>t-shirt</CATEGORY>
<CATEGORY>latest</CATEGORY>
</CATEGORIES>
<COLORS>
<COLOR>
<NAME>green</NAME>
<IMAGE>http://www.xyz.com/userfiles/daisy_green.png</IMAGE>
<AVAILABLE_SIZES>
<SIZE>S</SIZE>
<SIZE>M</SIZE>
</AVAILABLE_SIZES>
<SIZES>
<SIZE>S</SIZE>
<SIZE>M</SIZE>
<SIZE>L</SIZE>
<SIZE>XL</SIZE>
</SIZES>
</COLOR>
<COLOR>
<NAME>orange</NAME>
<IMAGE>http://www.xyz.com/userfiles/daisy_orange.png</IMAGE>
<AVAILABLE_SIZES>
<SIZE>L</SIZE>
<SIZE>M</SIZE>
</AVAILABLE_SIZES>
<SIZES>
<SIZE>S</SIZE>
<SIZE>M</SIZE>
<SIZE>L</SIZE>
<SIZE>XL</SIZE>
</SIZES>
</COLOR>
</COLORS>
</PRODUCT>
</PRODUCTS>
xsl 样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:element name="products">
<xsl:apply-templates select="PRODUCTS/PRODUCT"/>
</xsl:element>
</xsl:template>
<xsl:template match="PRODUCTS/PRODUCT">
<xsl:element name="product">
<xsl:element name="id">
<xsl:value-of select="CODE"/>
</xsl:element>
<xsl:element name="name">
<xsl:value-of select="NAME"/>
</xsl:element>
<xsl:element name="model">
<xsl:value-of select="CODE"/>
</xsl:element>
<xsl:element name="manufacturer">
<xsl:value-of select="MANUFACTURER"/>
</xsl:element>
<xsl:element name="category_id">
<xsl:value-of select="CATEGORY_ID"/>
</xsl:element>
<xsl:apply-templates select="CATEGORIES"/>
<xsl:element name="description">
<xsl:value-of select="DESCRIPTION"/>
</xsl:element>
<xsl:element name="price">
<xsl:value-of select="PRICE"/>
</xsl:element>
<xsl:element name="special">
<xsl:value-of select="PRICE_AKCIA"/>
</xsl:element>
<xsl:apply-templates select="COLORS/COLOR"/>
<xsl:apply-templates select="COLORS"/>
</xsl:element>
</xsl:template>
<xsl:template match="CATEGORIES">
<xsl:for-each select="CATEGORY">
<xsl:element name="category">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="COLORS">
<xsl:for-each select="COLOR/NAME">
<xsl:variable name="color" select="." />
<xsl:element name="{$color}">
<xsl:apply-templates select="COLOR/AVAILABLE_SIZES"/>
</xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="COLORS/COLOR">
<xsl:for-each select="IMAGE">
<xsl:element name="image">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:template>
<xsl:template match="COLOR/AVAILABLE_SIZES">
<xsl:for-each select="SIZE">
<xsl:value-of select="."/>:
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
结果:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<id>19</id>
<name>daisy</name>
<model>19</model>
<manufacturer>79</manufacturer>
<category_id>42</category_id>
<category>clothes</category>
<category>t-shirt</category>
<category>latest</category>
<description>t-shirt</description>
<price>33.33</price>
<special>24.17</special>
<image>http://www.xyz.com/userfiles/daisy_green.png</image>
<image>http://www.xyz.com/userfiles/daisy_orange.png</image>
<green/>
<orange/>
</product>
</products>