我尝试使用我创建的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>
答案 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
的孩子。