2017-07-04 8 views
1

SSISパッケージでIcecat xmlファイルの情報を抽出する作業をしました。 uは私がattibutesのようなサプライヤーの名前をしたいくつかの回を参照してください同様子ノードに応じて出力行を複製するxsltを持つxml文書を変換する方法

<?xml version="1.0" encoding="UTF-8"?> 
<ICECAT-interface> 
<Response Date="Tue Jun 27 16:00:01 2017" ID="0" Request_ID="1498572001" 
Status="1"> 
<SuppliersList> 
    <Supplier ID="1" LogoPic="http://images.icecat.biz/img/brand/thumb/1_91e0e5b25690437cb026012c624a00ad.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="10201" LogoLowPic="http://images.icecat.biz/img/brand/low/1_577ba75b274e4917bf27f4ff5fc609be.jpg" LogoLowPicHeight="200" LogoLowPicWidth="200" LogoLowSize="31058" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/1_43ebe562b309447dbbf377fd5adf41e3.jpg" LogoHighPicHeight="200" LogoHighPicWidth="200" LogoHighPicSize="31058" LogoOriginal="http://images.icecat.biz/img/brand/original/1_9a451c84f85c44d78ae79a1712706fe9.jpg" LogoOriginalSize="31133" Name="HP" Sponsor="1"> 
    <Names> 
     <Name langid="12" Name="惠普" /> 
    </Names> 
    </Supplier> 
    <Supplier ID="2" LogoPic="http://images.icecat.biz/img/brand/thumb/2_b4222cd1f4ef41a79d452c7d47d9b8a8.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="3668" LogoLowPic="http://images.icecat.biz/img/brand/low/2_7a45daa4e872400c8037f0e4231a7cb4.jpg" LogoLowPicHeight="53" LogoLowPicWidth="200" LogoLowSize="13241" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/2_286ef5dd29ca4941be0b9de27f041b4b.jpg" LogoHighPicHeight="53" LogoHighPicWidth="200" LogoHighPicSize="13241" LogoOriginal="http://images.icecat.biz/img/brand/original/2_093830b1b15a4eb8b38425d64ba80e9d.jpg" LogoOriginalSize="37929" Name="Toshiba" Sponsor="1" /> 
    <Supplier ID="3" LogoPic="http://images.icecat.biz/img/brand/thumb/3_d2375bf6ef1d47269cd01fa902a13788.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="3382" LogoLowPic="http://images.icecat.biz/img/brand/low/3_d05e0e4693d34b85ad56c94404338662.jpg" LogoLowPicHeight="76" LogoLowPicWidth="200" LogoLowSize="9156" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/3_a4caad745868496ea1ee4e6c0df57585.jpg" LogoHighPicHeight="76" LogoHighPicWidth="200" LogoHighPicSize="9156" LogoOriginal="http://images.icecat.biz/img/brand/original/3_b5bc53009d974136ba7048b8e2d9e8b4.jpg" LogoOriginalSize="37257" Name="IBM" Sponsor="1" /> 
    <Supplier ID="5" LogoPic="http://images.icecat.biz/img/brand/thumb/5_1cf5d422c33b47159d29120556249309.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="1916" LogoLowPic="http://images.icecat.biz/img/brand/low/5_a028484b02804360a3b2a3d6f1635439.jpg" LogoLowPicHeight="43" LogoLowPicWidth="200" LogoLowSize="6322" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/5_5666d3e455e34cdea7572e6ab5a4e38e.jpg" LogoHighPicHeight="43" LogoHighPicWidth="200" LogoHighPicSize="6322" LogoOriginal="http://images.icecat.biz/img/brand/original/5_b1c151c0bacf4360b4eb9161b71ea8a4.jpg" LogoOriginalSize="6510" Name="Sony" Sponsor="1" /> 
    <Supplier ID="6" LogoPic="http://images.icecat.biz/img/brand/thumb/6_bed73021a8fc496a8386b3c9276f0216.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="3111" LogoLowPic="http://images.icecat.biz/img/brand/low/6_8dae0e5b024145aa82c5c229048240e8.jpg" LogoLowPicHeight="117" LogoLowPicWidth="200" LogoLowSize="11196" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/6_53e052f2b7594a4e9f3950081dfe143d.jpg" LogoHighPicHeight="117" LogoHighPicWidth="200" LogoHighPicSize="11196" LogoOriginal="http://images.icecat.biz/img/brand/original/6_f4b347ab7d2e4ab88f84d8e04ccfe966.jpg" LogoOriginalSize="24384" Name="3com" /> 
    <Supplier ID="7" LogoPic="http://images.icecat.biz/img/brand/thumb/7_2e1091176d2d450eae2dce7506f1952f.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="3583" LogoLowPic="http://images.icecat.biz/img/brand/low/7_5760a89b29ab45aeae95ae639c247b3a.jpg" LogoLowPicHeight="89" LogoLowPicWidth="200" LogoLowSize="11942" LogoMediumPic="http://images.icecat.biz/img/brand/medium/7_ce2e94986d1847568b47a2d488d374fd.jpg" LogoMediumPicHeight="222" LogoMediumPicWidth="500" LogoMediumPicSize="31489" LogoHighPic="http://images.icecat.biz/img/brand/high/7_faa735acc8b7487093b094c1440cc91d.jpg" LogoHighPicHeight="1336" LogoHighPicWidth="2999" LogoHighPicSize="241523" LogoOriginal="http://images.icecat.biz/img/brand/original/7_6a89e510401c47d894ad4bb6188cc65a.jpg" LogoOriginalSize="442120" Name="Acer" Sponsor="1"> 
    <Names> 
     <Name langid="12" Name="宏碁" /> 
    </Names> 
    </Supplier> 
    <Supplier ID="8" LogoPic="http://images.icecat.biz/img/brand/thumb/8_d489e504070b40e886b6456a0a7beb99.jpg" LogoPicHeight="75" LogoPicWidth="75" LogoPicSize="6122" LogoLowPic="http://images.icecat.biz/img/brand/low/8_d5179e6b3bb14bf889d5bf56e2ed42e3.jpg" LogoLowPicHeight="200" LogoLowPicWidth="158" LogoLowSize="20437" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="http://images.icecat.biz/img/brand/high/8_e7673fd830a04b2fa8f655bb58dad630.jpg" LogoHighPicHeight="252" LogoHighPicWidth="200" LogoHighPicSize="25045" LogoOriginal="http://images.icecat.biz/img/brand/original/8_a711999f9d3a4c8fb35fec28f22d4dbf.jpg" LogoOriginalSize="46934" Name="Adobe" /> 
    <Supplier ID="9" LogoPic="" LogoPicHeight="0" LogoPicWidth="0" LogoPicSize="0" LogoLowPic="" LogoLowPicHeight="0" LogoLowPicWidth="0" LogoLowSize="0" LogoMediumPic="" LogoMediumPicHeight="0" LogoMediumPicWidth="0" LogoMediumPicSize="0" LogoHighPic="" LogoHighPicHeight="0" LogoHighPicWidth="0" LogoHighPicSize="0" LogoOriginal="" LogoOriginalSize="0" Name="Apple"> 
    <Names> 
     <Name langid="12" Name="苹果" /> 
    </Names> 
    </Supplier> 
.... 

(それはサプライヤーLANGID = 1 =英語のinternationnal名前です)時には、私は中国のような特殊な言語で名前の子ノード「名」をしましたここに私の試みを

<Supplier ID="1" LogoLowPic="http://images.icecat.biz/img/brand/low/1_577ba75b274e4917bf27f4ff5fc609be.jpg" Name="HP" langid="1"></Supplier> 
    <Supplier ID="1" LogoLowPic="http://images.icecat.biz/img/brand/low/1_577ba75b274e4917bf27f4ff5fc609be.jpg" Name="惠普" langid="12"></Supplier> 
    <Supplier ID="2" LogoLowPic="http://images.icecat.biz/img/brand/low/2_7a45daa4e872400c8037f0e4231a7cb4.jpg" Name="Toshiba" langid="1"></Supplier> 

、それは良い結果ではないのです。...私は子ノードをしたとき、私はラインの名前とLANGID上で新しいXMLファイルを作成したい

が複製行をattibutesこれが好き。

<?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" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/ICECAT-interface"> 
    <xsl:apply-templates select="Response"/> 
</xsl:template> 

<xsl:template match="Response"> 
    <xsl:apply-templates select="SuppliersList"/> 
</xsl:template> 

<xsl:template match="SuppliersList"> 
    <xsl:apply-templates select="Supplier"/> 
</xsl:template> 

<xsl:template match="Supplier"> 
    <xsl:element name="Supplier"> 
     <xsl:attribute name="ID"> 
      <xsl:value-of select="@ID"/> 
     </xsl:attribute> 
     <xsl:attribute name="LogoLowPic"> 
      <xsl:value-of select="@LogoLowPic"/> 
     </xsl:attribute> 
     <xsl:attribute name="Name"> 
      <xsl:value-of select="@Name"/> 
     </xsl:attribute> 
     <xsl:attribute name="langid"> 
      <xsl:value-of select="1"/> 
     </xsl:attribute> 
     <xsl:apply-templates select="Names"/> 
    </xsl:element> 
</xsl:template> 
<xsl:template match="Names"> 
    <xsl:element name="Name"> 
     <xsl:attribute name="Name"> 
      <xsl:value-of select="@Name"/> 
     </xsl:attribute> 
     <xsl:attribute name="langid"> 
      <xsl:value-of select="@langid"/> 
     </xsl:attribute> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

ありがとうございました。あなたがする必要がある

答えて

2

ことの一つは、あなたが兄弟ではなく、子を作成するので、むしろそれよりも、Supplier要素のコピー後であることを<xsl:apply-templates select="Names"/>を移動しています。

NameではなくNames/Nameを選択した方が簡単です。

このXSLTを試してみてください

...私は属性のコピーを簡単にするために xsl:copy-ofを使用しているか

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/ICECAT-interface"> 
    <xsl:apply-templates select="Response"/> 
</xsl:template> 

<xsl:template match="Response"> 
    <xsl:apply-templates select="SuppliersList"/> 
</xsl:template> 

<xsl:template match="SuppliersList"> 
    <xsl:copy> 
    <xsl:apply-templates select="Supplier"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Supplier"> 
    <Supplier> 
     <xsl:copy-of select="@ID|@LogoLowPic|@Name"/> 
     <xsl:attribute name="langid"> 
      <xsl:value-of select="1"/> 
     </xsl:attribute> 
    </Supplier> 
    <xsl:apply-templates select="Names/Name"/> 
</xsl:template> 

<xsl:template match="Name"> 
    <Supplier> 
    <xsl:copy-of select="../../@ID|../../@LogoLowPic" /> 
    <xsl:copy-of select="@Name|@langid" /> 
    </Supplier> 
</xsl:template> 
</xsl:stylesheet> 

注意。または、ここで属性値テンプレートを使用することもできます。たとえば、Nameテンプレートは次のように記述できます。

<xsl:template match="Name"> 
    <Supplier ID="{../../@ID}"> 
    <xsl:copy-of select="@Name|@langid" /> 
    </Supplier> 
</xsl:template> 
関連する問題