首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML转换为XML

XML转换为XML
EN

Stack Overflow用户
提问于 2020-12-16 06:42:18
回答 1查看 73关注 0票数 0

我需要将XML转换为XML。事实上,它已经在转变,但我遇到了问题,我不能循环通过一些标签。所以我有一个XML:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<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>

我得到了这个结果:

代码语言:javascript
复制
<?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>

但我需要得到这个结果:

代码语言:javascript
复制
<?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(条形码在结果)需要循环每次与相同的信息,从其产品。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 13:06:00

AFAICT,您希望为每个变体(EAN)创建一个产品,并重复父项的所有公共数据。

这可以通过以下方式做到:

XSLT1.0

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65318446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档