경로를 나타내는 level
요소를 기반으로 플랫 XML에서 중첩 된 계층 구조를 만들려고합니다. 각 level
요소와 그 소속의 형제 (이름과 번호가 다릅니다)는 '레코드'요소에 래핑되어야하므로 트리 구조가 만들어집니다. 이 소스에서XSLT : 경로를 기반으로하는 중첩 된 계층 구조로의 XML
(간체) :
<?xml version="1.0" encoding="UTF-8"?>
<record>
<level>first</level>
<unitid>0001</unitid>
<a-few-more-siblings/>
<level>first/second</level>
<unitid>0002</unitid>
<many-more-siblings/>
<level>first/second/third</level>
<unitid>0003a</unitid>
<some-more-siblings/>
<level>first/second/third</level>
<unitid>0003b</unitid>
<many-more-siblings/>
<level>first/second/third</level>
<unitid>0003c</unitid>
<some-more-siblings/>
<level>first</level>
<unitid>0004</unitid>
<again-more-siblings/>
</record>
내가 다음 원하는 출력 생성하고 싶습니다 :
<Record level="first">
<level>first</level>
<unitid>001</unitid>
<a-few-more-siblings/>
<Record level="second">
<level>second</level>
<unitid>002</unitid>
<many-more-siblings/>
<Record level="third">
<level>third</level>
<unitid>003a</unitid>
<some-more-siblings/>
</Record>
<Record level="third">
<level>third</level>
<unitid>003b</unitid>
<many-more-siblings/>
</Record>
<Record level="third">
<level>third</level>
<unitid>003c</unitid>
<some-more-siblings/>
</Record>
</Record>
</Record>
<Record level="first">
<level>first</level>
<unitid>0004</unitid>
<again-more-siblings/>
</Record>
지금까지 생산할 수있는 가장 가까운입니다 :
<record level="first">
<level>first</level>
<unitid>0001</unitid>
<some-other-siblings/>
<record level="second">
<level>first/second</level>
<unitid>0002</unitid>
<some-other-siblings/>
<record level="third">
<level>first/second</level>
<unitid>0002</unitid>
<some-other-siblings/>
<level>first/second/third</level>
<unitid>0003a</unitid>
<some-other-siblings/>
</record>
<record level="third">
<level>first/second</level>
<unitid>0002</unitid>
<some-other-siblings/>
<level>first/second/third</level>
<unitid>0003a</unitid>
<some-other-siblings/>
<level>first/second/third</level>
<unitid>0003b</unitid>
<some-other-siblings/>
</record>
<record level="third">
<level>first/second/third</level>
<unitid>0003c</unitid>
<some-other-siblings/>
</Record>
</record>
</record>
(제 3의 레벨에있는 바람직하지 않은 형제들에 추가적으로 들여 쓰기되어 있음;
비슷한 문제 ("평면에서 계층 적", "형제 자매까지"등)에 제안 된 접근법의 다양한 변형을 시도했지만 결국 너무 많은 형제 자매가 붙어 있습니다. 특정 위치 또는 세 번째 레벨의 첫 번째 레코드 만 출력합니다.
도움을 주시면 대단히 감사하겠습니다.
완벽한, 대단히 감사합니다. 그리고 '첫 번째'레벨 요소에 관한 아주 좋은 관찰. 실제로 형제 자매가 더 높은 수준에 속할 수 있음을 설명하기 위해 나중에 두 번째 것을 추가했지만 나 혼란 스러웠습니다. – user9775