テキストに変換して 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 の後) があります。たとえば、ドキュメント内のすべての 4A レコードをループせずに、3A に続く要素をループする方法がわかりません。3A ごとに、3A セクションと関連する 4A セクションのテキストを出力できるように、カウンターも保持する必要があります。
もともと、ファイル内の各要素を通過し、それぞれに適切な要素を 1 回呼び出す一連のループを設計していましたが、関連する要素の下に表示される要素だけでなく、ファイル内のすべての要素を選択することに気付きました。そのセクションで見たい (親) 要素。
次に、すべての要素がファイルに表示される順序で処理されるように、キャッチオールの使用を検討しました。ただし、この方法でカウンターを使用する方法がわかりません。(実際のカウンターを使用できないことは理解していますが、私の主張は for each ループ内でテンプレートを呼び出し、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別名