简体   繁体   English

XML 变换使用 XSLT

[英]XML transform using XSLT

I have this XML that I need to transform with some the info from it.我有这个 XML 我需要用它的一些信息进行转换。 Its quet complex XML.其复合物 XML。 So I lost in some loops... If someone could take a look would be nice.所以我迷失了一些循环......如果有人可以看看会很好。 So what I need to transform:所以我需要改造:

  1. Barcode(in orignal XML it's in /PRODUCTS/ITEM/GOODS/ITEM/EAN element)条形码(在原始 XML 中,它位于 /PRODUCTS/ITEM/GOODS/ITEM/EAN 元素中)

  2. Images(in orignal XML it's in /IMAGES/ITEM/URL element)图片(在原始 XML 中,它位于 /IMAGES/ITEM/URL 元素中)

  3. Name(in orignal XML it's in /PRODUCTS/ITEM/TITLE element) So I thought I could loop trhough /PRODUCTS and just pick the info, but what I get was these results combined together.名称(在原始 XML 中,它位于 /PRODUCTS/ITEM/TITLE 元素中)所以我想我可以循环遍历 /PRODUCTS 并选择信息,但我得到的是这些结果结合在一起。 Any thoughts?有什么想法吗?

    XSLT source: 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 source: 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>

Forgot to post my result.忘记发布我的结果了。 You can see I almost get what i want, but for example Barcode and Images getting dublicated... I need them to be unique.你可以看到我几乎得到了我想要的东西,但是例如条形码和图像被复制了......我需要它们是独一无二的。 I mean the Name, Description should be the same, but the Barcode and Images should be diferent.我的意思是名称,描述应该相同,但条形码和图像应该不同。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <Products>
    <Product>
      <Product_id />
      <SKU />
      <Barcode>859262603594585926260311111</Barcode>
      <Name>Spintelė po praustuvu Formy</Name>
      <Description> dydis (pxgxa): 80/100/120 x 55 x 22 cm medžiaga: MDF spalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatas Garantija: 5 metai  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.</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>
        <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>859262603594585926260311111</Barcode>
      <Name>Spintelė po praustuvu Formy2</Name>
      <Description> dydis (pxgxa): 80/100/120 x 55 x 22 cm medžiaga: MDF spalva: lakuota balta / ąžuolo arba riešuto imitacijos laminatas Garantija: 5 metai  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.</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>
        <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>
  </Products>
</root>

Here's a way you could do this (if I understood properly what you are trying to do):这是您可以执行此操作的一种方法(如果我正确理解您要执行的操作):

<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>

See it working here: https://xsltfiddle.liberty-development.net/jxNakAu看到它在这里工作: https://xsltfiddle.liberty-development.net/jxNakAu

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM