我正在解析要轉換爲文本並提交給FinCEN的XML,該FinCEN需要它以非常特定的格式。基本上,我會得到一個xml文件,其中所有的元素都是兄弟姐妹排列的,並且它們之間的關聯是基於文件中的外觀順序。所以我可以有一個看起來像這樣的文件:關於複雜XSLT的指導
<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部分的文本。
最初,我設計了一系列循環,遍歷文件中的每個元素併爲每個元素調用一次,但是我意識到將會挑選文件中的所有元素,而不僅僅是那些出現在我想要查看該部分的相關(父級)元素下面。
然後,我考慮使用捕獲所有元素,以便它們在文件中出現的順序處理。但是,如果我這樣做的話,我不知道如何使用任何類型的計數器。 (我知道我不能使用一個實際的計數器,但我的爭論是在每個循環內調用一個模板並通過位置()作爲參數)
請讓我知道,如果您有任何建議去與此。我有一些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, '', ''), '')"/>
<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, '', ''), '')"/>
<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>
第一部分應該產生以下NG輸出:(間距ommitted這個崗位)
2AD銀行新Corp.373637383ACD654646321321Ave XBrooklynNY11235USalternate名
輸入是實際的XML還是它看起來像你的文章中的內容?如果是XML,請編輯您的帖子並顯示實際數據。 – 2013-02-20 18:49:23
我添加了真正的XMl。請注意,這是在Sharepoint 2007中,因此它可能是XSLT 1.0。謝謝! – 2013-02-20 19:38:29
從可回答的問題來看,你還有很長的路要走。請提供您期望的樣本(縮小爲僅顯示「有趣」的部分)以及您已經嘗試過的XSL。如果你正在使用循環,這可能是錯誤的方法。從[身份轉換](http://en.wikipedia.org/wiki/Identity_transform)開始,然後使用更具體的模板處理異常情況。 – 2013-02-20 19:49:55