2012-05-22 6 views
0

나는 'folio'라고하는 중첩 된 태그가있는 XML 데이터 문서를 가지고 있습니다. 중첩 된 태그의 최대 레벨은 4입니다. 중첩 된 Folio가없는 수준에 도달 할 때까지 각 Folio를 반복적으로 처리하고 내용을 인쇄해야합니다.XSL에서 재귀를 구현하는 방법은 무엇입니까?

XSL에서 재귀를 수행하는 방법을 잘 모르겠습니다. 다음은 샘플 문서입니다. 누군가가 도와 줄 수 있습니까?

감사합니다.

<xsl:template match="folio"> 
    <do something> 
    <xsl:apply-templates/> 
    </do something> 
</xsl:template> 

이 자연스럽게 재귀 :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
    <reporting:root xmlns:reporting="http://www.xyzcorp.net/reporting"> 
     <reporting:default0 reporting:type="Portfolio"> 
     <reporting:header> 
      <reporting:configuration> 
     <reporting:columns> 
      <reporting:column reporting:group="instrument" reporting:name="Ident" reporting:tag="ident" reporting:type="int"/> 
      <reporting:column reporting:group="prices" reporting:name="Last (Time)" reporting:tag="lastTime" reporting:type="string"/> 
      <reporting:column reporting:group="noGroup" reporting:name="RIC" reporting:tag="ric" reporting:type="string"/> 
      <reporting:column reporting:group="instrument" reporting:name="Reference" reporting:tag="reference" reporting:type="string"/> 
      <reporting:column reporting:group="result" reporting:name="Currency" reporting:tag="currency" reporting:type="string"/> 
     </reporting:columns> 
     </reporting:configuration> 
    </reporting:header> 
    <reporting:window reporting:Id="36674" reporting:level="0" reporting:name="MY_PORTFOLIO" reporting:parentId="11991"> 
     <reporting:folio> 
     <reporting:folioid>1234</reporting:folioid> 
     <reporting:folio> 
      <reporting:folioid>9876</reporting:folioid> 
      <reporting:line reporting:Id="67520135" reporting:level="1" reporting:name="INTERNATIONAL BUSINESS MACHINES CORP" reporting:parentId="36674" reporting:positionType="0"> 
      <reporting:ident>643633</reporting:ident> 
      <reporting:reference>IBM.USD</reporting:reference> 
      <reporting:currency>USD</reporting:currency> 
      </reporting:line> 
      <reporting:line reporting:Id="67520179" reporting:level="1" reporting:name="GENERAL ELECTRIC CO" reporting:parentId="36674" reporting:positionType="0"> 
      <reporting:ident>643635</reporting:ident> 
      <reporting:ric>GE.N</reporting:ric> 
      <reporting:reference>GE.USD</reporting:reference> 
      <reporting:currency>USD</reporting:currency> 
      </reporting:line> 
     </reporting:folio> 
     </reporting:folio> 
    </reporting:window> 
    </reporting:default0> 
</reporting:root> 
+0

http://stackoverflow.com/questions/9890097/how-do-you-find-the-deepest-node-steps-xpath-php-xml와 비슷합니다. 'Folio'노드로 제한하기 위해 조금만 조정하면됩니다. – PinnyM

답변

5

XSLT의 처리의 정상 기본 모드는 아이를 처리하기 위해 뭔가 전화를 걸고 적용 템플릿을 수행 각 요소에 대한 템플릿 규칙을 작성할 때마다 요소를 처리하면 자손에 대한 처리를 호출합니다.

그래서 XSLT에서 재귀를 수행하는 방법을 배울 필요가 없습니다. 당신은 거의 그것을하지 않는 방법을 배울 필요가 있습니다.

관련 문제