定义XSLT以将XML转换为XML

时间:2017-04-10 22:34:35

标签: xml xslt ssis transformation etl

我尝试使用我创建的XSLT样式表将以下XML转换为另一个XML文档。输出不是我想要的,输出不是正确的xml节点,也不是输出标签。

请有人帮忙。

要转换的XML文件如下所示:

    <?xml version="1.0" encoding="utf-8"?>
      <Extract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <Header>
           <SubscriptionName>Auto_Clients</SubscriptionName>
           <SubscriptionID>1731</SubscriptionID>
           <ExecutionID>11987</ExecutionID>
           <ODIFeed>Clients</ODIFeed>
           <DataDateTime>2013-07-22T13:53:49</DataDateTime>
           <FirmCodes>
             <FirmCode>ZR</FirmCode>
           </FirmCodes>
           <Environment>INTEGRATION</Environment>
           <NoOfRecords>1</NoOfRecords>
          </Header>
          <Clients>
           <Client>
            <FirmCode>ZR</FirmCode>
            <ClientReference>ZR1071049</ClientReference>
            <ClientType>02</ClientType>
            <ShortName>ZRTEST</ShortName>
            <FullName>CLTTEST</FullName>
           </Client>
          </Clients>
       </Extract>

我创建的XSLT StyleSheet就是这个

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0">
     <xsl:output method="xml"  indent="yes"/>
       <xsl:template match="table">
        <Clients>
          <xsl:for-each select="Client">
          <Client>
           <FirmCode>
              <xsl:value-of select="FirmCode" />
           </FirmCode>
           <ClientReference>
              <xsl:value-of select="ClientReference" />
           </ClientReference>
           <ClientType>
              <xsl:value-of select="ClientType" />
           </ClientType>
           <ShortName>
              <xsl:value-of select="ShortName" />
           </ShortName>
           <FullName>
              <xsl:value-of select="FullName" />
           </FullName>
        </Client>
       </xsl:for-each>
      </Clients>
     </xsl:template>
    </xsl:stylesheet>

My Desired输出类似于:

    <Clients>
      <Client>
        <FirmCode>ZR</FirmCode>
        <ClientReference>ZR1071049</ClientReference>
        <FullName>CLTTEST</FullName>
      </Client>
    </Clients>

1 个答案:

答案 0 :(得分:3)

输入中没有table元素,因此您的模板不匹配任何内容,并且永远不会执行。你看到的纯粹是应用built-in template rules的结果。

您需要更改:

<xsl:template match="table">

为:

<xsl:template match="Extract">

同样改变:

<xsl:for-each select="Client">

为:

<xsl:for-each select="Clients/Client">

因为Client不是Extract的孩子。