현재 XML 파일을 특정 요소를 가져 와서 선택된 요소의 조상을 따라 이동하여 여러 출력 XML 파일로 변환하려고합니다.XSLT 2.0 : foreach를 사용하지 않고 모든 조상을 포함하는 요소 변환
예를 들어:
소스 XML :
<?xml version="1.0" encoding="utf-8"?>
<root>
<level_a>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
<level_e/>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_d>
<level_e/>
</level_d>
</level_d>
</level_c>
</level_b>
</level_a>
</root>
출력 XML 파일 :
1 :
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
2 :
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
3 :
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
<output level="e"/>
<output level="e"/>
</output>
</output>
</output>
</output>
4 :
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
</output>
가 나는 다음의 XPath와 시퀀스를 생성하는 라인에 뭔가를 할 수 알고 :
(// level_d [하지 (level_d) ]) [last()]/ancestor :: * [self :: level_c | self :: level_b]
그리고 foreach를 사용하여 반복합니다. 결과가 문서 순서대로 표시됩니다. 하지만 난 정말 관심이 무엇인지, foreach는의 사용에 의지하지 않고 동일한을 달성하는 방법은, 어떤 솔루션은 내가 모든 요소가 반전 반환 생각할 수
...
어떤 힌트는 크게이다 감사
안부
Vlax
'/ */*'와 일치하고 거기에서 결과 문서를 만들 수 없습니까? –
질문을 정교하게 (또는 다른 질문을)해야 할 수도 있습니다. Daniel Haley의 접근 방식이 문제를 해결하지 못하는 이유는이 질문에서 분명하지 않습니다. 당신은 질문을 제기하는 관계없는 세부 사항을 단순화하기위한 포인트를 얻지 만 아인슈타인의 충고를 기억하십시오 : 가능한 한 간단하지만 간단한 것은 아닙니다! –
이제는 단순화 된 예제를 변경했습니다. 실제 버전에는 실제 실제 XML 소스가 반영되어야합니다. 실제로 xml에는 루트 요소 다음에 2 개의 요소가있을 필요가 없습니다. 모든 요소는 하나의 숫자 또는 하나만 가질 수 있습니다. 내가 가진 유일한 확실성은 level_d 요소가 있고 특정 요소 (예 : xml의 element_a)까지 모든 조상 트리가있는 xml 파일을 출력하기 위해 추출되어야한다는 것입니다. – Vlax