我需要将XML转换为XML。事实上,它已经在转变,但我遇到了问题,我不能循环通过一些标签。所以我有一个XML:
<?xml version="1.0" encoding="utf-8"?>
<PRODUCTS>
<ITEM>
<TITLE>Spintelė po praustuvu Formy</TITLE>
<TECHNICAL_INFO><ul> <li>dydis (pxgxa): 80/100/120 x 55 x 22 cm</li> <li>medžiaga: MDF</li> <li>spalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatas</li> <li><a href="img/pageflip/ravak-zaruka/13/" target="_blank" rel="noopener">Garantija: 5 metai</a></li> </ul> <p>Praustuvo spintelė Formy, montuojama po praustuvu Formy. Spintelė, kurios ilgis 80 cm, turi vieną stalčių, spintelė, kurios ilgis 100 ir 120 cm – turi su stalčius. Galite rinktis iš šių apdailos variantų: lakuotas baltas blizgus arba riešuto / ąžuolo laminatas. Korpusas tiekiamas surinktas, įskaitant ir montavimo komplektą (varžtai, vyriai, dangteliai). Spintelė tvirtinama prie sienos. Norint sukurti vientiso stiliaus vonios kambarį rekomenduojame praustuvo spintelę Formy derinti su kitais koncepcijos Formy gaminiais (praustuvu Formy I ir Formy II, veidrodžiu Formy, aukšta spintele SB Formy), RAVAK maišytuvais ir kitais gaminiais.</p></TECHNICAL_INFO>
<IMAGES>
<ITEM>
<URL>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila.jpg</URL>
</ITEM>
<ITEM>
<URL>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech.jpg</URL>
</ITEM>
</IMAGES>
<GOODS>
<ITEM>
<TITLE>SD Formy 840 Juoda</TITLE>
<COLOR>Juoda</COLOR>
<EAN>85926260351111</EAN>
</ITEM>
<ITEM>
<TITLE>SD Formy 9160 balta</TITLE>
<COLOR>Balta</COLOR>
<EAN>8592626035945</EAN>
</ITEM>
</GOODS>
</ITEM>
<ITEM>
<TITLE>Spintelė po praustuvu Formy 2000</TITLE>
<TECHNICAL_INFO><ul> <li>dydis (pxgxa): 80/100/120 x 55 x 22 cm</li> <li>medžiaga: MDF</li> <li>spalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatas</li> <li><a href="img/pageflip/ravak-zaruka/13/" target="_blank" rel="noopener">Garantija: 5 metai</a></li> </ul> <p>Praustuvo spintelė Formy, montuojama po praustuvu Formy. Spintelė, kurios ilgis 80 cm, turi vieną stalčių, spintelė, kurios ilgis 100 ir 120 cm – turi su stalčius. Galite rinktis iš šių apdailos variantų: lakuotas baltas blizgus arba riešuto / ąžuolo laminatas. Korpusas tiekiamas surinktas, įskaitant ir montavimo komplektą (varžtai, vyriai, dangteliai). Spintelė tvirtinama prie sienos. Norint sukurti vientiso stiliaus vonios kambarį rekomenduojame praustuvo spintelę Formy derinti su kitais koncepcijos Formy gaminiais (praustuvu Formy I ir Formy II, veidrodžiu Formy, aukšta spintele SB Formy), RAVAK maišytuvais ir kitais gaminiais.</p></TECHNICAL_INFO>
<IMAGES>
<ITEM>
<URL>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila2.jpg</URL>
</ITEM>
<ITEM>
<URL>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech2.jpg</URL>
</ITEM>
</IMAGES>
<GOODS>
<ITEM>
<TITLE>SD Formy 810 Balta</TITLE>
<COLOR>Juoda</COLOR>
<EAN>85926260351111</EAN>
</ITEM>
<ITEM>
<TITLE>SD Formy 900 balta</TITLE>
<COLOR>Balta</COLOR>
<EAN>8592626035789</EAN>
</ITEM>
</GOODS>
</ITEM>
</PRODUCTS>这就是正在转换XML的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:template match="/">
<root>
<Products>
<xsl:apply-templates select="PRODUCTS/ITEM"/>
</Products>
</root>
</xsl:template>
<xsl:template match="ITEM">
<Product>
<Product_id></Product_id>
<SKU></SKU>
<Barcode><xsl:apply-templates select="GOODS/ITEM/EAN"/></Barcode>
<Name><xsl:value-of select="TITLE"/></Name>
<Description><xsl:apply-templates select="TECHNICAL_INFO/ul/li"/></Description>
<Images>
<xsl:apply-templates select="IMAGES/ITEM/URL"/>
</Images>
<Units></Units>
<Price></Price>
<Currency>EUR</Currency>
<Inventory_count></Inventory_count>
<Note></Note>
<Group1>STD.</Group1>
</Product>
</xsl:template>
<xsl:template match="EAN">
<ITEM><xsl:value-of select="."/></ITEM>
</xsl:template>
<xsl:template match="li">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="URL">
<Image><xsl:value-of select="."/></Image>
</xsl:template>
</xsl:stylesheet>我得到了这个结果:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Products>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>85926260351111</ITEM>
<ITEM>8592626035945</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>85926260351111</ITEM>
<ITEM>8592626035789</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy 2000</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila2.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech2.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
</Products>
</root>但我需要得到这个结果:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Products>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>85926260351111</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>8592626035945</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>85926260351111</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy 2000</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila2.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech2.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
<Product>
<Product_id />
<SKU />
<Barcode>
<ITEM>85926260351111</ITEM>
</Barcode>
<Name>Spintelė po praustuvu Formy 2000</Name>
<Description>dydis (pxgxa): 80/100/120 x 55 x 22 cmmedžiaga: MDFspalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatasGarantija: 5 metai</Description>
<Images>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-bila2.jpg</Image>
<Image>https://www.ravak.cz/img/_/sd-formy.foto/sd-formy01-orech2.jpg</Image>
</Images>
<Units />
<Price />
<Currency>EUR</Currency>
<Inventory_count />
<Note />
<Group1>STD.</Group1>
</Product>
</Products>
</root>主要的差别是EAN(条形码在结果)需要循环每次与相同的信息,从其产品。
发布于 2020-12-16 13:06:00
AFAICT,您希望为每个变体(EAN)创建一个产品,并重复父项的所有公共数据。
这可以通过以下方式做到:
XSLT1.0
<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="/PRODUCTS">
<root>
<Products>
<xsl:for-each select="ITEM">
<!-- parent item info -->
<xsl:variable name="item-info">
<Name>
<xsl:value-of select="TITLE"/>
</Name>
<Description>
<xsl:apply-templates select="TECHNICAL_INFO/ul/li"/>
</Description>
<Images>
<xsl:apply-templates select="IMAGES/ITEM/URL"/>
</Images>
</xsl:variable>
<!-- a product for each variant -->
<xsl:for-each select="GOODS/ITEM">
<Product>
<Product_id/>
<SKU/>
<Barcode>
<ITEM>
<xsl:value-of select="EAN"/>
</ITEM>
</Barcode>
<xsl:copy-of select="$item-info"/>
<Units/>
<Price/>
<Currency>EUR</Currency>
<Inventory_count/>
<Note/>
<Group1>STD.</Group1>
</Product>
</xsl:for-each>
</xsl:for-each>
</Products>
</root>
</xsl:template>
<xsl:template match="li">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="URL">
<Image>
<xsl:value-of select="."/>
</Image>
</xsl:template>
</xsl:stylesheet>https://stackoverflow.com/questions/65318446
复制相似问题