我正在解析要转换为文本并提交给 FinCEN 的 XML,后者要求它采用非常特定的格式。基本上,我会得到一个 xml 文件,其中的元素全部排列为同级元素,它们之间的关联基于文件中的出现顺序。所以我可能有一个看起来像这样的文件:
<bsar:BSAForm xmlns:bsar="http://www.fincen.gov/bsa/bsar/2011-06-01">
<bsar:FilingInstitutionInformation>
<bsar:PrimaryRegulator>D</bsar:PrimaryRegulator>
<bsar:FilerName>New Banking Corp.</bsar:FilerName>
<bsar:TIN>373637383</bsar:TIN>
<bsar:TINTYPE>A</bsar:TINTYPE>
<bsar:FIType>
<ucc:FinInsType xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">C</ucc:FinInsType>
<ucc:OtherSpecify xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01" />
</bsar:FIType>
<bsar:SecuritiesFuturesType>
<bsar:ClearingBrokerSecurities />
<bsar:CPOCTA />
<bsar:FuturesCommissionMerchant />
<bsar:HoldingCompany />
<bsar:IntroducingCommodities />
<bsar:IntroducingSecurities />
<bsar:InvestmentAdvisor />
<bsar:InvestmentCompany />
<bsar:RetailForeign />
<bsar:SROFutures />
<bsar:SROSecurities />
<bsar:Subsidiary />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:SecuritiesFuturesType>
<bsar:FIIdentification>
<ucc:FIIDType xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">D</ucc:FIIDType>
<ucc:FIIDNumber xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">654646321321</ucc:FIIDNumber>
</bsar:FIIdentification>
<bsar:FIAddress>
<ucc:Address xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">Ave X</ucc:Address>
<ucc:City xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">Brooklyn</ucc:City>
<ucc:State xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">NY</ucc:State>
<ucc:ZIP xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">11235</ucc:ZIP>
<ucc:Country xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01">US</ucc:Country>
</bsar:FIAddress>
<bsar:AlternateName>alternate name</bsar:AlternateName>
</bsar:FilingInstitutionInformation> <!--2A-->
<bsar:FinancialInstitutionInformation>
<bsar:LegalName>Citibank</bsar:LegalName>
</bsar:FinancialInstitutionInformation> <!--2B-->
<bsar:SuspiciousActivityInformation>
<bsar:FilingType>A</bsar:FilingType>
<bsar:ContinuingActivity />
<bsar:JointReport />
<ucc:DocumentControlNumber xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01" />
<bsar:ViolationAmount />
<bsar:AmountUnKnownOrNotInvolved>B</bsar:AmountUnKnownOrNotInvolved>
<bsar:FromSuspiciousActivityDate>12312012</bsar:FromSuspiciousActivityDate>
<bsar:ToSuspiciousActivityDate>12312012</bsar:ToSuspiciousActivityDate>
<bsar:CumulativeAmount />
<bsar:Structuring>
<bsar:AltersTransactionBSA>A</bsar:AltersTransactionBSA>
<bsar:AltersTransactionCTR />
<bsar:CustomerCancels />
<bsar:MultipleTransactions />
<bsar:MultipleTransactionsCTR />
<bsar:SuspiciousInquiry />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Structuring>
<bsar:TerroristFinanacing>
<bsar:KnownTerroristOrg />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:TerroristFinanacing>
<bsar:Fraud>
<bsar:ACH />
<bsar:BusinessLoan />
<bsar:Check />
<bsar:ConsumerLoan />
<bsar:CreditDebitCard />
<bsar:HealthCare />
<bsar:Mail />
<bsar:MassMarketing />
<bsar:PyramidScheme />
<bsar:Wire />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Fraud>
<bsar:Casinos>
<bsar:InquiryOnEOB />
<bsar:MinimalGaming />
<bsar:IntraCasinoFundTransfer />
<bsar:CounterChecksorMarkers />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Casinos>
<bsar:MoneyLaundering>
<bsar:ExchangeSmallBig />
<bsar:PhysicalCondition />
<bsar:SourceFund />
<bsar:Designation />
<bsar:EftOrWireTransfer />
<bsar:ExchangeCurrency />
<bsar:GovernmentPaymentReceipt />
<bsar:MultipleAccounts />
<bsar:NonCashMonetaryInstr />
<bsar:StrawMan />
<bsar:MoneyLaunderingBlackMarket />
<bsar:OutOfPatterns />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:MoneyLaundering>
<bsar:IdentificationDocumentation>
<bsar:ChangeName />
<bsar:MultiIndiWithSameSimilarName />
<bsar:QuestionableOrfalseDoc />
<bsar:RefusedDoc />
<bsar:MultipleIdentities />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:IdentificationDocumentation>
<bsar:OtherSuspicoiusActivities>
<bsar:AccountTakeOver />
<bsar:BriberyOrGratuity />
<bsar:CounterfeitInstr />
<bsar:ElderFinancial />
<bsar:Embezzlement />
<bsar:Forgeries />
<bsar:IdentifyTheft />
<bsar:LittleNoConcerns />
<bsar:MisuseFreeLook />
<bsar:MisusePosition />
<bsar:SuspectedDomesticCorruption />
<bsar:SuspectedForeignCorruption />
<bsar:SuspiciousUseInformationValueSys />
<bsar:SuspiciousUseMultiLoc />
<bsar:NoPurpose />
<bsar:TwoOrMoreWorkingTogether />
<bsar:UnAuthorizedEInstrusion />
<bsar:UnLicensedMSB />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:OtherSuspicoiusActivities>
<bsar:Insurance>
<bsar:ExcessiveInsurance>A</bsar:ExcessiveInsurance>
<bsar:ExcessiveOrUnusalCash />
<bsar:ProceedsFromUnrelated3rd />
<bsar:LifeSettlement />
<bsar:PolicyTermination />
<bsar:UnclearNoInterest />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Insurance>
<bsar:SecuritiesFutureOptions>
<bsar:InsiderTrading />
<bsar:WashTrading />
<bsar:Misappropriation />
<bsar:UnauthorizedPooling />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:SecuritiesFutureOptions>
<bsar:MortgageFraud>
<bsar:Appraisal />
<bsar:Foreclosure />
<bsar:LoanModification />
<bsar:ReverseMortgage />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:MortgageFraud>
<bsar:Product>
<bsar:BondsNotes>A</bsar:BondsNotes>
<bsar:CommercialMtgg />
<bsar:CommercialPaper />
<bsar:CreditCard />
<bsar:DebitCard />
<bsar:ForexTrans />
<bsar:FutureOptionsOnFu />
<bsar:HedgeFund />
<bsar:HomeEquityLoan />
<bsar:HomeEquityLine />
<bsar:InsuranceAnuity />
<bsar:MutualFund />
<bsar:OptionsOnSec />
<bsar:PennyStocks />
<bsar:PrepaidAccess />
<bsar:ResidentialMtgg />
<bsar:SecurityFuture />
<bsar:Stocks />
<bsar:SwapHybridDer />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Product>
<bsar:InstrumentOrPayment>
<bsar:BankCheck />
<bsar:ForeignCurrency />
<bsar:FundsTransfer />
<bsar:GamingInstrm />
<bsar:GovernmentPayment />
<bsar:MoneyOrders />
<bsar:PersonalCheck />
<bsar:TravelersCheck />
<bsar:USCurrency />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:InstrumentOrPayment>
<bsar:InternalControlNumber>654321654321</bsar:InternalControlNumber>
<bsar:CommodityTypeRecord>
<bsar:CommodityType>commodity type</bsar:CommodityType>
</bsar:CommodityTypeRecord>
<bsar:ProductInstrumentDescRecord>
<bsar:ProductInstrumentDesc>product description</bsar:ProductInstrumentDesc>
</bsar:ProductInstrumentDescRecord>
<bsar:MarketTradedRecord>
<bsar:MarketTraded>101</bsar:MarketTraded>
</bsar:MarketTradedRecord>
<bsar:IPAddressRecord>
<bsar:IPAddress>255.255.255.255</bsar:IPAddress>
</bsar:IPAddressRecord>
<bsar:CUSIPNumberRecord>
<bsar:CUSIPNumber>3465431654</bsar:CUSIPNumber>
</bsar:CUSIPNumberRecord>
</bsar:SuspiciousActivityInformation> <!--3A-->
<bsar:FinancialInstitutionInformation>
<bsar:LegalName>Bank of America</bsar:LegalName>
</bsar:FinancialInstitutionInformation> <!--2B-->
<bsar:SuspiciousActivityInformation>
<bsar:FilingType>A</bsar:FilingType>
<bsar:ContinuingActivity />
<bsar:JointReport />
<ucc:DocumentControlNumber xmlns:ucc="http://www.fincen.gov/bsa/ucommon-components/2011-06-01" />
<bsar:ViolationAmount />
<bsar:AmountUnKnownOrNotInvolved>B</bsar:AmountUnKnownOrNotInvolved>
<bsar:FromSuspiciousActivityDate>12312012</bsar:FromSuspiciousActivityDate>
<bsar:ToSuspiciousActivityDate>12312012</bsar:ToSuspiciousActivityDate>
<bsar:CumulativeAmount />
<bsar:Structuring>
<bsar:AltersTransactionBSA>A</bsar:AltersTransactionBSA>
<bsar:AltersTransactionCTR />
<bsar:CustomerCancels />
<bsar:MultipleTransactions />
<bsar:MultipleTransactionsCTR />
<bsar:SuspiciousInquiry />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Structuring>
<bsar:TerroristFinanacing>
<bsar:KnownTerroristOrg />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:TerroristFinanacing>
<bsar:Fraud>
<bsar:ACH />
<bsar:BusinessLoan />
<bsar:Check />
<bsar:ConsumerLoan />
<bsar:CreditDebitCard />
<bsar:HealthCare />
<bsar:Mail />
<bsar:MassMarketing />
<bsar:PyramidScheme />
<bsar:Wire />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Fraud>
<bsar:Casinos>
<bsar:InquiryOnEOB />
<bsar:MinimalGaming />
<bsar:IntraCasinoFundTransfer />
<bsar:CounterChecksorMarkers />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Casinos>
<bsar:MoneyLaundering>
<bsar:ExchangeSmallBig />
<bsar:PhysicalCondition />
<bsar:SourceFund />
<bsar:Designation />
<bsar:EftOrWireTransfer />
<bsar:ExchangeCurrency />
<bsar:GovernmentPaymentReceipt />
<bsar:MultipleAccounts />
<bsar:NonCashMonetaryInstr />
<bsar:StrawMan />
<bsar:MoneyLaunderingBlackMarket />
<bsar:OutOfPatterns />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:MoneyLaundering>
<bsar:IdentificationDocumentation>
<bsar:ChangeName />
<bsar:MultiIndiWithSameSimilarName />
<bsar:QuestionableOrfalseDoc />
<bsar:RefusedDoc />
<bsar:MultipleIdentities />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:IdentificationDocumentation>
<bsar:OtherSuspicoiusActivities>
<bsar:AccountTakeOver />
<bsar:BriberyOrGratuity />
<bsar:CounterfeitInstr />
<bsar:ElderFinancial />
<bsar:Embezzlement />
<bsar:Forgeries />
<bsar:IdentifyTheft />
<bsar:LittleNoConcerns />
<bsar:MisuseFreeLook />
<bsar:MisusePosition />
<bsar:SuspectedDomesticCorruption />
<bsar:SuspectedForeignCorruption />
<bsar:SuspiciousUseInformationValueSys />
<bsar:SuspiciousUseMultiLoc />
<bsar:NoPurpose />
<bsar:TwoOrMoreWorkingTogether />
<bsar:UnAuthorizedEInstrusion />
<bsar:UnLicensedMSB />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:OtherSuspicoiusActivities>
<bsar:Insurance>
<bsar:ExcessiveInsurance>A</bsar:ExcessiveInsurance>
<bsar:ExcessiveOrUnusalCash />
<bsar:ProceedsFromUnrelated3rd />
<bsar:LifeSettlement />
<bsar:PolicyTermination />
<bsar:UnclearNoInterest />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Insurance>
<bsar:SecuritiesFutureOptions>
<bsar:InsiderTrading />
<bsar:WashTrading />
<bsar:Misappropriation />
<bsar:UnauthorizedPooling />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:SecuritiesFutureOptions>
<bsar:MortgageFraud>
<bsar:Appraisal />
<bsar:Foreclosure />
<bsar:LoanModification />
<bsar:ReverseMortgage />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:MortgageFraud>
<bsar:Product>
<bsar:BondsNotes>A</bsar:BondsNotes>
<bsar:CommercialMtgg />
<bsar:CommercialPaper />
<bsar:CreditCard />
<bsar:DebitCard />
<bsar:ForexTrans />
<bsar:FutureOptionsOnFu />
<bsar:HedgeFund />
<bsar:HomeEquityLoan />
<bsar:HomeEquityLine />
<bsar:InsuranceAnuity />
<bsar:MutualFund />
<bsar:OptionsOnSec />
<bsar:PennyStocks />
<bsar:PrepaidAccess />
<bsar:ResidentialMtgg />
<bsar:SecurityFuture />
<bsar:Stocks />
<bsar:SwapHybridDer />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:Product>
<bsar:InstrumentOrPayment>
<bsar:BankCheck />
<bsar:ForeignCurrency />
<bsar:FundsTransfer />
<bsar:GamingInstrm />
<bsar:GovernmentPayment />
<bsar:MoneyOrders />
<bsar:PersonalCheck />
<bsar:TravelersCheck />
<bsar:USCurrency />
<bsar:Other />
<bsar:OtherSpecify />
</bsar:InstrumentOrPayment>
<bsar:InternalControlNumber>654321654321</bsar:InternalControlNumber>
<bsar:CommodityTypeRecord>
<bsar:CommodityType>commodity type</bsar:CommodityType>
</bsar:CommodityTypeRecord>
<bsar:ProductInstrumentDescRecord>
<bsar:ProductInstrumentDesc>product description</bsar:ProductInstrumentDesc>
</bsar:ProductInstrumentDescRecord>
<bsar:MarketTradedRecord>
<bsar:MarketTraded>101</bsar:MarketTraded>
</bsar:MarketTradedRecord>
<bsar:IPAddressRecord>
<bsar:IPAddress>255.255.255.255</bsar:IPAddress>
</bsar:IPAddressRecord>
<bsar:CUSIPNumberRecord>
<bsar:CUSIPNumber>3465431654</bsar:CUSIPNumber>
</bsar:CUSIPNumberRecord>
</bsar:SuspiciousActivityInformation> <!--3A-->
<bsar:SubjectInformation>
<bsar:Entity />
<bsar:SubjectInformationUnavailable />
<bsar:LastNameOrNameOfEntity>Ceriello</bsar:LastNameOrNameOfEntity>
</bsar:SubjectInformation> <!--4A-->
<bsar:SubjectInformation>
<bsar:Entity />
<bsar:SubjectInformationUnavailable>B</bsar:SubjectInformationUnavailable>
<bsar:LastNameOrNameOfEntity>Gutierrez</bsar:LastNameOrNameOfEntity>
</bsar:SubjectInformation> <!--4A-->
<bsar:SubjectInformation>
<bsar:Entity />
<bsar:SubjectInformationUnavailable />
<bsar:LastNameOrNameOfEntity>Roper</bsar:LastNameOrNameOfEntity>
</bsar:SubjectInformation> <!--4A-->
基本上,伪代码如下所示:
Output 1A
For each 2A
Output 2A
For each 2B before the next 2A
Output 2B
For each 3A before the next 2B
Output 3A; increment counter
For each 4A before the next 3A
Output 4A with above counter
文本基本上需要按照它在文件中的顺序进行格式化,并带有一些摘要部分(例如,在每个 2B 之后)。我无法弄清楚如何循环遍历 3A 之后的元素,例如不循环遍历文档中的所有 4A 记录。对于每个 3A,我还需要保留一个计数器,以便可以将其与 3A 部分和相关 4A 部分的文本一起输出。
最初,我设计了一系列循环,这些循环将遍历文件中的每个元素并为每个元素调用适当的一次,但我意识到这将挑选出文件中的所有元素,而不仅仅是出现在相关下方的元素我想为该部分查看的(父)元素。
然后,我考虑使用包罗万象的方法,以便所有元素都按照它们在文件中出现的顺序进行处理。但是,如果我这样做,我不知道如何使用任何类型的计数器。(我知道我不能使用实际的计数器,但我的观点是在 for 每个循环中调用一个模板并将 position() 作为参数传递)
如果您对此有任何建议,请告诉我。我有一些 XSL 经验,但这与我习惯的有点不同。
提前致谢。
编辑:
输出应该看起来像这样:
1A Transmitter info
2A Filing Institution Info
2B Financial Institution Info
3A Suspicious Activity Info
9A Suspicious Activity Summary Info
2B Financial Institution 2 Info
3A Suspicious Activity 2 Info
4A Subject 1 Info
4A Subject 2 Info
4A Subject 3 Info
9B Filing institution Summary info
这是我尝试过的一些 XSL,但我确定不会工作,因为循环正在循环整个文档中的所有记录类型,而不仅仅是作为父级的兄弟元素之后的那些:
<xsl:template match="/bsar:BSAForm">
<xsl:for-each select="bsar:FilingInstitutionInformation">
<xsl:call-template name="FileInstInfo"/> <!--2A-->
<xsl:for-each select="../bsar:FinancialInstitutionInformation">
<xsl:call-template name="FinInstActivity"/> <!--2B-->
<xsl:for-each select="../bsar:SuspiciousActivityInformation">
<xsl:call-template name="SuspActivityInfo"/> <!--3A-->
<xsl:for-each select="../bsar:SubjectInformation">
<xsl:call-template name="Subject"/> <!--4A-->
</xsl:for-each>
<xsl:for-each select="../bsar:SuspiciousActivityInformationNarrative">
<xsl:call-template name="NarrativeDesc"/> <!--5A-->
</xsl:for-each>
<xsl:call-template name="SuspActivityInfoSmry"/> <!--9A-->
</xsl:for-each>
</xsl:for-each>
<xsl:call-template name="FileInstSmry"/> <!--9B-->
</xsl:for-each>
<xsl:call-template name="FileSmry"/> <!--9Z-->
</xsl:template>
<xsl:template name="FileInstInfo" match="bsar:FilingInstitutionInformation">
<xsl:variable name="FIType" select="bsar:FIType"/>
<xsl:variable name="SecFuType" select="bsar:SecuritiesFuturesType"/>
<xsl:variable name="FIId" select="bsar:FIIdentification"/>
<xsl:variable name="FIIdType" select="$FIId/ucc:FIIDType"/>
<xsl:variable name="Addr" select="bsar:FIAddress"/>
<xsl:variable name="Country" select="$Addr/ucc:Country"/>
<xsl:variable name="ZIP" select="translate($Addr/ucc:ZIP, translate($Addr/ucc:ZIP, '0123456789', ''), '')"/>
<xsl:variable name="FinInstType" select="$FIType/ucc:FinInsType"/>
<!-- 1-2(2) Record Type -->
<xsl:text xml:space="preserve">2A</xsl:text>
<!-- 3-4(2) Part IV Primary Federal Regulator -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="bsar:PrimaryRegulator"/>
<xsl:with-param name="length" select="2"/>
</xsl:call-template>
<!-- 5-154(150) Part IV Filer Name -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="bsar:FilerName"/>
<xsl:with-param name="length" select="150"/>
</xsl:call-template>
<!-- 155-179(25) Part IV TIN -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="translate(bsar:TIN, translate(bsar:TIN, '0123456789', ''), '')"/>
<xsl:with-param name="length" select="25"/>
</xsl:call-template>
<!-- 180(1) Part IV TIN Type -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="bsar:TINTYPE"/>
<xsl:with-param name="length" select="1"/>
</xsl:call-template>
<!-- 181(1) Part IV Type of Financial Institution -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$FinInstType"/>
<xsl:with-param name="length" select="1"/>
</xsl:call-template>
<!-- 182-231(50) Part IV Type of Financial Institution - Other -->
<xsl:variable name="FinInstTypeOther">
<xsl:choose>
<xsl:when test="$FinInstType = 'Z'">
<xsl:value-of select="$FIType/ucc:OtherSpecify"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$FinInstTypeOther"/>
<xsl:with-param name="length" select="50"/>
</xsl:call-template>
<!-- 232-244(13) Part IV Type of Securities and Futures Institution -->
<xsl:variable name="SecFuInstType">
<xsl:choose>
<xsl:when test="$FinInstType = 'E'">
<xsl:for-each select="$SecFuType/*">
<xsl:if test="position() != last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$SecFuInstType"/>
<xsl:with-param name="length" select="13"/>
</xsl:call-template>
<!-- 245-294(50) Part IV Type of Securities and Futures Institution - Other -->
<xsl:variable name="SecFuInstOtherSpecify">
<xsl:choose>
<xsl:when test="contains($SecFuInstType,'Z')">
<xsl:value-of select="$SecFuType/bsar:OtherSpecify"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$SecFuInstOtherSpecify"/>
<xsl:with-param name="length" select="50"/>
</xsl:call-template>
<!-- 295(1) Part IV Financial Institution Identification Type -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$FIIdType"/>
<xsl:with-param name="length" select="1"/>
</xsl:call-template>
<!-- 296-315(20) Part IV Financial Institution Identification Number -->
<xsl:variable name="FIIdNumber">
<xsl:choose>
<xsl:when test="$FIIdType != ''">
<xsl:value-of select="$FIId/ucc:FIIDNumber"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$FIIdNumber"/>
<xsl:with-param name="length" select="20"/>
</xsl:call-template>
<!-- 316-415(100) Part IV Address -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$Addr/ucc:Address"/>
<xsl:with-param name="length" select="100"/>
</xsl:call-template>
<!-- 416-465(50) Part IV City -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$Addr/ucc:City"/>
<xsl:with-param name="length" select="50"/>
</xsl:call-template>
<!-- 466-468(3) Part IV State -->
<xsl:variable name="State">
<xsl:choose>
<xsl:when test="$Country = 'CA' or $Country = 'US' or $Country = 'MX'">
<xsl:value-of select="$Addr/ucc:State"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$State"/>
<xsl:with-param name="length" select="3"/>
</xsl:call-template>
<!-- 469-477(9) Part IV Zip / Postal Code -->
<xsl:variable name="ZipCode">
<xsl:choose>
<xsl:when test="$Country = 'US' and (string-length($ZIP) = 9 and (substring($ZIP, 6, 9) = '0000' or substring($ZIP, 6, 9) = '9999'))">
<xsl:value-of select="substring($ZIP, 1, 5)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$ZIP"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$ZipCode"/>
<xsl:with-param name="length" select="9"/>
</xsl:call-template>
<!-- 478-479(2) Part IV Country -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="$Country"/>
<xsl:with-param name="length" select="2"/>
</xsl:call-template>
<!-- 480-629(150) Part IV Alternate Name -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="./bsar:AlternateName"/>
<xsl:with-param name="length" select="150"/>
</xsl:call-template>
<!-- 630-1190(561) Filler -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="''"/>
<xsl:with-param name="length" select="561"/>
</xsl:call-template>
<!-- 1191-1200(10) User Field -->
<xsl:call-template name="append-pad">
<xsl:with-param name="text" select="''"/>
<xsl:with-param name="length" select="10"/>
</xsl:call-template>
<xsl:value-of select="$newline" />
</xsl:template>
<xsl:template name="append-pad">
<!-- recursive template to left justify and append -->
<!-- the value with whatever padding is passed in -->
<xsl:param name="padding" xml:space="preserve"> </xsl:param>
<xsl:param name="text"/>
<xsl:param name="length"/>
<xsl:choose>
<xsl:when test="string-length($text) < $length">
<xsl:call-template name="append-pad">
<xsl:with-param name="padding" select="$padding"/>
<xsl:with-param name="text" select="concat($text,$padding)"/>
<xsl:with-param name="length" select="$length"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($text,1,$length)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
第一部分应产生以下输出:(本文省略了间距)
2AD New Banking Corp.373637383ACD654646321321Ave XBrooklynNY11235US别名