我有由外部提供者發送的xml數據。我們需要將其輸出到固定寬度的文本文件中,以加載到另一個系統中。該數據包括一個全球元素,稱爲Stream
,應爲每個Voucher
元素輸出。但事實並非如此!xsl不輸出換行到文本輸出並且不重複全局數據
這裏是XML:
<VocaDocument xmlns:cmn="http://www.voca.com/schemas/common" xmlns="http://www.voca.com/schemas/messaging" xmlns:iso="http://www.voca.com/schemas/common/iso" xmlns:env="http://www.voca.com/schemas/envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.voca.com/schemas/messaging http://www.voca.com/schemas/messaging/Voca_AUDDIS_AdviceofDDI_v1.0.xsd">
<Data>
<Document>
<StreamStart>
<Stream>
<AgencyBankParameter>234</AgencyBankParameter>
<BankName>LLOYDS BANK PLC</BankName>
<BankCode>0004</BankCode>
<AgencyBankName>BANK OF CYPRUS UK LTD</AgencyBankName>
<AgencyBankCode>0234</AgencyBankCode>
<StreamCode>01</StreamCode>
<VoucherSortCode>SC300037</VoucherSortCode>
<VoucherAccountNumber>46990760</VoucherAccountNumber>
</Stream>
</StreamStart>
<DDIVouchers>
<Voucher>
<TransactionCode>NEW</TransactionCode>
<OriginatorIdentification>
<ServiceUserNumber>123456</ServiceUserNumber>
</OriginatorIdentification>
</Voucher>
<Voucher>
<TransactionCode>OLD</TransactionCode>
<OriginatorIdentification>
<ServiceUserNumber>789012</ServiceUserNumber>
</OriginatorIdentification>
<ContactDetails>
<PhoneNumber>020 83395862</PhoneNumber>
<FaxNumber> FAX</FaxNumber>
<Address>
<cmn:AddresseeName>RANALD LESLIE</cmn:AddresseeName>
<cmn:PostalName>NUFFIELD HEALTH </cmn:PostalName>
<cmn:AddressLine>NUFFIELD HOUSE</cmn:AddressLine>
<cmn:TownName>SURBITON</cmn:TownName>
<cmn:CountyIdentification> </cmn:CountyIdentification>
<cmn:CountryName>UNITED KINGDOM</cmn:CountryName>
<cmn:ZipCode>KT6 4BN</cmn:ZipCode>
</Address>
</ContactDetails>
<ProcessingDate>2014-08-19</ProcessingDate>
<BankAccount><FirstLastVoucherCode>FirstLast</FirstLastVoucherCode><AgencyBankCode>0234</AgencyBankCode><SortCode>SC300037</SortCode><AccountNumber>46990760</AccountNumber><TotalVouchers>1</TotalVouchers></BankAccount>
</Voucher>
</DDIVouchers>
</Document>
</Data>
</VocaDocument>
我有下面的XSL,我從StackOverflow的幫助下建造的。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://www.voca.com/schemas/messaging"
xmlns:cmn="http://www.voca.com/schemas/common">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/my:MyRoot">
<xsl:for-each select="VocaDocument/Data/Document/DDIVouchers/Voucher">
<xsl:value-of select="../../StreamStart/Stream/AgencyBankParameter" />
<xsl:value-of select="../../StreamStart/Stream/BankName" />
<xsl:value-of select="ContactDetails/PhoneNumber" />
<xsl:value-of select="ContactDetails/FaxNumber" />
<xsl:value-of select="ContactDetails/Address/cmn:AddresseeName" />
<xsl:value-of select="ContactDetails/Address/cmn:PostalName" />
<xsl:value-of select="ContactDetails/Address/cmn:AddressLine" />
<xsl:value-of select="ContactDetails/Address/cmn:TownName" />
<xsl:value-of select="ContactDetails/Address/cmn:CountyIdentification" />
<xsl:value-of select="ContactDetails/Address/cmn:CountryName" />
<xsl:value-of select="ContactDetails/Address/cmn:ZipCode" />
<xsl:value-of select="ProcessingDate" />
<xsl:value-of select="BankAccount/SortCode" />
<xsl:value-of select="BankAccount/AccountNumber" />
<xsl:value-of select="BankAccount/TotalVouchers" />
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我有兩個問題: 1)Stream
元素應在輸出的每一行的開始重複,他們還沒有 - 我得到一個在開始時,則只是<Voucher>
記錄。該衝突的事情是沒有額外的命名空間聲明它作品!
2)我想在我的texty文件中每行結尾處有一個換行/回車輸出,但它不起作用。我試過這個<xsl:text>
</xsl:text>
和這個:<xsl:text> </xsl:text>
但都沒有工作。
請寄出可用於重現問題的代碼。你的XML是不完整的,它沒有'MyRoot'元素。 – 2014-09-02 15:11:26
對不起,是的,我從我的其他帖子複製它。看起來很奇怪,你的代碼正確地輸出了兩次'LLOYDS BANK PLC'(Stream)元素,但是我必須做的一個更改已經破壞了它 – 2014-09-02 15:24:35
這個東西似乎與你提供的代碼一樣,它停止工作一次我包含默認名稱空間信息(' xmlns:my =「http://www.voca.com/schemas/messaging」') – 2014-09-02 15:29:32