Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xsl不将换行输出到文本输出,也不重复全局数据_Xml_Xslt - Fatal编程技术网

Xml xsl不将换行输出到文本输出,也不重复全局数据

Xml xsl不将换行输出到文本输出,也不重复全局数据,xml,xslt,Xml,Xslt,我有由外部提供者发送的xml数据。我们需要将其输出到一个固定宽度的文本文件,以便加载到另一个系统中。数据包括一个名为流的全局元素,该元素应为每个凭证元素输出。但事实并非如此 以下是xml: <VocaDocument xmlns:cmn="http://www.voca.com/schemas/common" xmlns="http://www.voca.com/schemas/messaging" xmlns:iso="http://www.voca.com/schemas/commo

我有由外部提供者发送的xml数据。我们需要将其输出到一个固定宽度的文本文件,以便加载到另一个系统中。数据包括一个名为
的全局元素,该元素应为每个
凭证
元素输出。但事实并非如此

以下是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>

234
劳埃德银行
0004
塞浦路斯银行英国有限公司
0234
01
SC300037
46990760
新的
123456
古老的
789012
020 83395862
传真
拉纳尔德莱斯利
纳菲尔德健康
纳菲尔德之家酒店
苏比顿
联合王国
140亿克朗
2014-08-19
FirstLast0234SC30003746907601
我在StackOverflow的帮助下构建了以下xsl

<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>&#xD;&#xA;</xsl:text>
    </xsl:for-each>
</xsl:template> 

</xsl:stylesheet>
我有两个问题: 1)
元素应该在输出的每一行的开头重复,而不是-我在开始时得到一个,然后只有
记录。奇怪的是,如果没有额外的名称空间声明,就可以工作


2) 我希望在每行末尾的文本文件中输出换行符/回车符,但它不起作用。我试过这个

和这个:
和#10但两者都不起作用。

沿此方法尝试:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msg="http://www.voca.com/schemas/messaging" 
xmlns:cmn="http://www.voca.com/schemas/common" >
<xsl:output method="text" encoding="UTF-8" />

<xsl:template match="/">
    <xsl:for-each select="msg:VocaDocument/msg:Data/msg:Document/msg:DDIVouchers/msg:Voucher">
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:AgencyBankParameter" />
        <xsl:value-of select="../../msg:StreamStart/msg:Stream/msg:BankName" />

        <xsl:value-of select="msg:BankAccount/msg:SortCode" />
        <xsl:value-of select="msg:BankAccount/msg:AccountNumber" />
        <xsl:value-of select="msg:BankAccount/msg:TotalVouchers" />

        <!-- NOTE HOW TO EXTRACT AN ADDRESS ELEMENT THAT HAS ITS OWN NAMESPACE -->
        <xsl:value-of select="msg:ContactDetails/msg:Address/cmn:AddresseeName" />

        <xsl:text>&#xD;&#xA;</xsl:text>
    </xsl:for-each>
</xsl:template> 

</xsl:stylesheet>

请注意,默认情况下,子元素继承其父元素的命名空间。

请发布可用于重现问题的代码。您的XML不完整,并且没有
MyRoot
元素。对不起,是的,我从另一篇文章中复制了它。看起来很奇怪,您的代码两次正确地输出了LLOYDS BANK PLC(Stream)元素,但我不得不做的一个更改破坏了它。似乎您提供的代码在我包含默认名称空间信息(`xmlns:my=”“`)后停止工作。非常感谢您的帮助,耐心点,花点时间帮我。