2017-04-10 256 views
2

我已经尝试将以下XML转换为使用创建的XSLT样式表的另一个XML文档。输出没有给我我想要的,输出不是正确的xml节点,也不是输出标签。定义XSLT以将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样式表是这样的

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

我所需的输出是一样的东西:

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

回答

3

您的输入中没有table元素,因此您的模板无法匹配d从不执行。你看到的纯粹是应用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的孩子。

+0

这并没有改变输出,由于某种原因,我得到的输出是文本,输出的所有节点数据不仅仅是我感兴趣的选择节点,也没有输出标签。 – DBoyDev

+0

@DBoyDev你可以看到它在这里工作:http://xsltransform.net/naZXpWx –

+0

不,这个问题是别的 - 请参阅:http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work-直到-I-除去根节点/ 34762628#34762628 –