xml - 使用 XSLT 进行 XML 转换
问题描述
我有这个 XML,我需要使用其中的一些信息进行转换。它具有复杂的 XML。所以我迷失了一些循环......如果有人可以看看会很好。所以我需要改造:
条形码(在原始 XML 中位于 /PRODUCTS/ITEM/GOODS/ITEM/EAN 元素中)
图片(在原始 XML 中位于 /IMAGES/ITEM/URL 元素中)
名称(在原始 XML 中它位于 /PRODUCTS/ITEM/TITLE 元素中)所以我想我可以通过 /PRODUCTS 循环并选择信息,但我得到的是这些结果结合在一起。有什么想法吗?
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:for-each select="//PRODUCTS/ITEM/GOODS/ITEM"> <Product> <Product_id></Product_id> <SKU></SKU> <Barcode> <xsl:for-each select="//PRODUCTS/ITEM/GOODS/ITEM"> <xsl:value-of select="EAN"/> </xsl:for-each> </Barcode> <Name><xsl:value-of select="TITLE"/></Name> <Description><xsl:value-of select="TECHNICAL_INFO"/></Description> <Images><xsl:for-each select="//IMAGES/ITEM"> <Image><xsl:value-of select="URL"/></Image> </xsl:for-each> </Images> <Units></Units> <Price></Price> <Currency>EUR</Currency> <Inventory_count></Inventory_count> <Note></Note> <Group1>STD.</Group1> </Product> </xsl:for-each> </Products> </root> </xsl:template> </xsl:stylesheet>
XML 源:
> <?xml version="1.0" encoding="utf-8"?> <PRODUCTS>
>
> <ITEM> <TYPE>nabytek</TYPE> <TITLE>Spintelė po praustuvu Formy</TITLE>
> <DESCRIPTION>80/100/120 x 55 x 22 cm dydžio</DESCRIPTION>
> <URL>https://www.ravak.lt/lt/spintele-po-praustuvu-formy</URL>
> <CATEGORY>Vonios kambario baldai Formy</CATEGORY>
> <SCHEME>https://www.ravak.cz/img/_/sd-formy/tn_sd-formy.jpg</SCHEME>
> <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 800
> balta</TITLE> <COLOR>Balta</COLOR> <EAN>8592626035945</EAN>
> <PICTURE>https://www.ravak.lt/img/product_pictures/X000001029_big.jpg</PICTURE>
> </ITEM> </GOODS> </ITEM> <ITEM> <TYPE>nabytek</TYPE>
> <TITLE>Spintelė po praustuvu Formy2</TITLE> <DESCRIPTION>80/100/120
> x 55 x 22 cm dydžio</DESCRIPTION>
> <URL>https://www.ravak.lt/lt/spintele-po-praustuvu-formy</URL>
> <CATEGORY>Vonios kambario baldai Formy</CATEGORY>
> <SCHEME>https://www.ravak.cz/img/_/sd-formy/tn_sd-formy.jpg</SCHEME>
> <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 1500 balta</TITLE>
> <COLOR>Balta</COLOR>
> <EAN>85926260311111</EAN>
> <PICTURE>https://www.ravak.lt/img/product_pictures/X000001029_big.jpg</PICTURE>
> </ITEM>
> </GOODS> </ITEM> </PRODUCTS>
解决方案
这是您可以执行此操作的一种方法(如果我正确理解您要执行的操作):
<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">
<xsl:value-of select="."/>
</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 ://xsltfiddle.liberty-development.net/jxNakAu
推荐阅读
- python - 在微观时间范围内捕捉峰值/趋势结束的最佳方法?
- c# - 使用 gdiplus 打印 png24 图像时 GDI 内存泄漏
- cmake - 如何组织 ctest 测试夹具
- sql - 在 Postgres SQL 中插入期间列“id”中的空值
- javascript - 在 javascript 类组件中添加一个属性以便在方法之间进行通信
- css - 为第 2/5 行指定的网格行,但未按预期工作,仅填写 1 行
- java - spring-boot native-image 在 graalvm compile 上失败
- node.js - 如何为用户生成唯一的 URL 并使用参数来验证链接的有效性?
- javascript - 在错误的位置打开图层 WMTS
- node.js - 无法通过订阅更新商店,因为 ConnectionHandler.getConnection 总是返回 undefined