2014-10-31 177 views
0

我試圖循環選擇XML文檔中的節點。當節點不具有的前綴如jfxpf:xfa時,我可以找到節點LeaveType,但是當它們添加後,什麼都不會返回。在xsl中循環遍歷嵌套節點

XML文件

<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator="FF99V250_01"?> 
<jfxpf:XPF xmlns:jfxpf="http://www.xfa.com/schema/xml-package"> 
    <jfxpf:Package> 
     <jfxpf:Resource Location="Adoption_Leave_PT.xft"> 
      <jfxpf:Link ContentType="application/x-jetform-cft" /> 
     </jfxpf:Resource> 
     <jfxpf:Resource Location="default.xml"> 
      <jfxpf:Content ContentType="text/xml" Location="default.xml"> 
       <xfa:Data xmlns:xfa="http://www.xfa.com/schema/xfa-data"> 
        <xfa:DataGroup> 
         <Adoption_Leave_PT> 
          <?jetform ^Dat ^page Page1?> 
          <ENV /> 
          <chkSetFullMand>0</chkSetFullMand> 
          <chkWFA>0</chkWFA> 
          <FFField1>Form Help</FFField1> 
          <chkHideMatDetails>1</chkHideMatDetails> 
          <optSelf>-1</optSelf> 
          <optManager>0</optManager> 
          <optAdmin>0</optAdmin> 
          <chkProtSomeInitiator>0</chkProtSomeInitiator> 
          <Department>Customer Services LGW</Department> 
          <chkProtInitiator>0</chkProtInitiator> 
          <chkProtManager>0</chkProtManager> 
          <CurrentWorkNo>01252554321</CurrentWorkNo> 
          <chkProtES>0</chkProtES> 
          <EmployeeStaffNo /> 
          <EmployeeName /> 
          <mandBirthDate>0</mandBirthDate> 
          <ManagerStaffNo>******</ManagerStaffNo> 
          <ManagerName>Not Required</ManagerName> 
          <chkProtPay>0</chkProtPay> 
          <txtEmployeeInfo>* Managers details can be overwritten if your manager is away from the business or you report to a different manager.</txtEmployeeInfo> 
          <chkShowLetter>0</chkShowLetter> 
          <chkFirstTime>1</chkFirstTime> 
          <chkLetterAmended>0</chkLetterAmended> 
          <LeaveType>Adoption</LeaveType> 
          <EMPSTAFFNO /> 
          <chkMaternityChat>1</chkMaternityChat> 
          <EMPNAME /> 
          <EMPFIRSTNAME /> 
          <MGRSTAFFNO /> 
          <txtLine1 /> 
          <MGRNAME /> 
          <txtMaternitySection>Adoption Details</txtMaternitySection> 
          <txtESMaternitySection>Admin Unit/ Employee Services Use Only</txtESMaternitySection> 
          <txtEWC>Expected Date child is to be placed with you :</txtEWC> 
          <EWC /> 
          <DateHSMP /> 
          <radPensionableYes>0</radPensionableYes> 
          <radPensionableNo>-1</radPensionableNo> 
          <txtPensionM>*</txtPensionM> 
          <txtPensionRepay>Would you like your pension contribution to be deducted</txtPensionRepay> 
          <radPensionRepay3>0</radPensionRepay3> 
          <txtPensionRepayM>*</txtPensionRepayM> 
          <radPensionRepay1>0</radPensionRepay1> 
          <txtIntentionToReturn>Intention to return to work (not binding)</txtIntentionToReturn> 
          <radReturnYes>0</radReturnYes> 
          <radReturnNo>-1</radReturnNo> 
          <txtIntentionToReturnM>*</txtIntentionToReturnM> 
          <txtAnticipatedReturnDate>Anticipated return to work date (not binding) :</txtAnticipatedReturnDate> 
          <AnticipatedReturnDate /> 
          <MATB1Sent>0</MATB1Sent> 
          <txtMATB1SentM>*</txtMATB1SentM> 
          <JFWF_ACTION>Initiate</JFWF_ACTION> 
          <chkMATB1Seen>1</chkMATB1Seen> 
          <txtESSection>Admin Unit/ Employee Services Use Only</txtESSection> 
          <txtESTitle1>Setting up Adoption Leave</txtESTitle1> 
          <txtLine3 /> 
          <txtESTitle2>On Return</txtESTitle2> 
          <chkESMATB1Received>0</chkESMATB1Received> 
          <chkESMATB1ReceivedM>*</chkESMATB1ReceivedM> 
          <txtConfirmedReturnDate>Confirmed Return Date :</txtConfirmedReturnDate> 
          <ConfirmedReturnDate /> 
          <txtComments>Other Comments :</txtComments> 
          <Comments /> 
          <txtPension>Pension :</txtPension> 
          <radNotApplicable>-1</radNotApplicable> 
          <radNotPensionable>0</radNotPensionable> 
          <rad3Months>0</rad3Months> 
          <radLumpSum>0</radLumpSum> 
          <txtPaySection>Pay Services Use Only</txtPaySection> 
          <txtPSTitle1>Setting up Adoption Pay</txtPSTitle1> 
          <txtLine4 /> 
          <txtPSTitle2>Rework if needed</txtPSTitle2> 
          <txtLine5 /> 
          <txtPSTitle3>On Return</txtPSTitle3> 
          <chkPSMATB1Received>0</chkPSMATB1Received> 
          <chkPSMATB1ReceivedM>*</chkPSMATB1ReceivedM> 
          <chkMaternityPayUpdated>0</chkMaternityPayUpdated> 
          <chkSMPtoNormal>0</chkSMPtoNormal> 
          <chkSMPtoNormalM>*</chkSMPtoNormalM> 
          <chkMaternityPayEntered>0</chkMaternityPayEntered> 
          <chkMaternityPayEnteredM>*</chkMaternityPayEnteredM> 
          <txtPSTitle2comment>(if required)</txtPSTitle2comment> 
          <JFWF_DEBUGACTOR /> 
          <JFWF_DEBUGOPT /> 
          <JFWF_AGENT /> 
          <JFWF_DELEGATE /> 
          <JFWF_CHOICE>Initiate</JFWF_CHOICE> 
          <JFWF_STATUS /> 
          <JFWF_TRANSPORT>EMAIL</JFWF_TRANSPORT> 
          <JFWF_VERSION /> 
          <txtEWCM>*</txtEWCM> 
          <txtBirthDate>Actual Placement Date of Child :</txtBirthDate> 
          <ActualBirthDate /> 
          <ActualDateHSMP /> 
          <chkDateChanges>0</chkDateChanges> 
          <DateWFA>01APR2007</DateWFA> 
          <txtDateUnpaid>Start Date for Unpaid Adoption Leave</txtDateUnpaid> 
          <DateUnpaid /> 
          <txtActualDateUnpaid>Actual Start Date for Unpaid Adoption Leave</txtActualDateUnpaid> 
          <ActualDateUnpaid /> 
          <txtESUpdatedOn /> 
          <txtLine2 /> 
          <txtPensionable>Do you wish Unpaid Adoption Leave to be pensionable (not binding) :</txtPensionable> 
          <txtAnticipatedReturnDateM>*</txtAnticipatedReturnDateM> 
          <txtMax>(Maximum 52 weeks)</txtMax> 
          <txtInfoAddress>After showing your evidential documents for Adoption to your manager, please write your Staff Number on them and send to : 
           Employee Services, Orient 3B, Waterside HAB3</txtInfoAddress> 
          <txtActualBirthDateM>*</txtActualBirthDateM> 
          <PAGENO>1</PAGENO> 
          <txtInfo2>If placement date of child is before the given Start Date for SAP, please change the Actual Start Date for SAP and send to Pay Services</txtInfo2> 
          <MGREMAIL /> 
          <txtInfo1>The Start Date for Statutory Adoption Pay (start of adoption leave) MUST be on or before the Expected Date of Placement.</txtInfo1> 
          <LastMatDate /> 
          <txtDateHSMP>Start Date for Statutory Adoption Pay</txtDateHSMP> 
          <txtDateHSMPM>*</txtDateHSMPM> 
          <txtActualDateHSMP>Actual Start Date for SAP</txtActualDateHSMP> 
          <?jetform ^Dat ^page Page2?> 
          <chkProtectLetter>0</chkProtectLetter> 
          <Address>Employee Services 
           Orient 3B, Waterside (HAB3) 
           British Airways Plc. 
           PO Box 365 
           Harmondsworth 
           Middlesex UB7 0GB</Address> 
          <chkWFA2>0</chkWFA2> 
          <LetterTelNo /> 
          <LetterDate /> 
          <LetterToName /> 
          <LetterEWC /> 
          <LetterLower>This means that you will receive Statutory Adoption Pay for the 26 weeks commencing</LetterLower> 
          <LetterHSMP /> 
          <LetterAdditional>. This will be followed immediately by 26 weeks</LetterAdditional> 
          <LetterUnpaid /> 
          <LetterReturnDate /> 
          <LetterFromName /> 
          <Dept1>Employee Services</Dept1> 
         </Adoption_Leave_PT> 
        </xfa:DataGroup> 
       </xfa:Data> 
      </jfxpf:Content> 
     </jfxpf:Resource> 
    </jfxpf:Package> 
</jfxpf:XPF> 

XSL文件

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
    xmlns:jfxpf="http://www.xfa.com/schema/xml-package"  
    xmlns:xfa="http://www.xfa.com/schema/xfa-data" 
> 

<xsl:template match="/"> 
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/" timeStamp="2014-10-28T10:56:27Z" uuid="13c56b66-6ca8-4ae6-9ace-391f0a432ffe"> 
    <xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"> 
     <xfa:data> 
      <AdoptionAndMaternityLeave> 
       <SubmitURL/> 
       <hiddenData> 
        <initiatedLevel>1</initiatedLevel> 
        <peopleLookupURL>http://www.aptosolutions.co.uk</peopleLookupURL> 
        <workSpaceURL>http://localhost:7002/workspace</workSpaceURL> 
        <fromMailingAdd>[email protected]</fromMailingAdd> 
        <dataCatcherURL>https://selfserve-uat.baplc.com/DataCatcher/localService.do</dataCatcherURL> 
        <versionData>APTO_DEV 1.00</versionData> 
        <devVersion>0.01</devVersion> 
        <formAssetURL>/Applications/Adoption and Maternity Leave/1.0/Forms/MaternityLeave.xdp</formAssetURL> 
        <letterSaved>0</letterSaved> 
       </hiddenData> 
       <xsl:for-each select="jfxpf:XPF/jfxpf:Package/jfxpf:Resource/jfxpf:Content/xfa:Data/xfa:DataGroup/Adoption_Leave_PT"> 
        <FormName><xsl:value-of select="LeaveType"/></FormName> 
       </xsl:for-each> 
      </AdoptionAndMaternityLeave> 
     </xfa:data> 
    </xfa:datasets> 
    <pdf xmlns="http://ns.adobe.com/xdp/pdf/" href="MaternityLeave.pdf"/> 
    <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> 
     <annots/> 
    </xfdf> 
</xdp:xdp> 
</xsl:template> 
</xsl:stylesheet> 

這是代碼不工作的模塊:

<xsl:for-each select="jfxpf:XPF/jfxpf:Package/jfxpf:Resource/jfxpf:Content/xfa:Data/xfa:DataGroup/Adoption_Leave_PT"> 
    <FormName><xsl:value-of select="LeaveType"/></FormName> 
</xsl:for-each> 
+0

這似乎是「XFA:數據」在部分.. – Jon 2014-10-31 10:04:58

+0

使用兩個'xfa'的不同名稱空間聲明:'http://www.xfa.com/schema/xfa-data'和'http:// www.xfa.org/schema/xfa-data/1.0 /'。放棄一個,然後再試一次。 – 2014-10-31 10:06:14

+0

是的,我剛剛意識到,哈哈。我將如何打印出第二行,而不是解析它?我想把它當作輸出。 – Jon 2014-10-31 10:07:30

回答

1

這裏的問題是,你正在重新定義xfa:前綴。選取其他前綴尋址源XML元素,例如:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:jfxpf="http://www.xfa.com/schema/xml-package"  
xmlns:ns0="http://www.xfa.com/schema/xfa-data"> 

然後:

<xsl:for-each select="jfxpf:XPF/jfxpf:Package/jfxpf:Resource/jfxpf:Content/ns0:Data/ns0:DataGroup/Adoption_Leave_PT"> 
    <FormName><xsl:value-of select="LeaveType"/></FormName> 
</xsl:for-each>