I이 일반 XML로 intertwingled -markup는 "이정표"만
<root>
<milestone type="opener" xml:id="m1" />
text
<milestone type="opener" xml:id="m2"/>
text
<milestone type="closer" ref="#m2"/>
text
<node>
text
</node>
...
<milestone type="closer" ref="#m1"/>
</root>
하고 "부모"-milestone 구조를 해결하려면 (즉 [email protected]:id='m1'
를)에서 <node>
으로 XPath를 사용합니다.
모든 [email protected]:id
은 오프너로서 그리고 이정표 구조의 가까이에 [email protected]
에 해당합니다.
노드에 "부모"-milestone 구조는
node/preceding::milestone/concat('#',@xml:id) = node/following:milestone/@ref
이 테스트는 <node>
의 맥락에 의존 비슷한 무언가에 의해 식별 될 것이다.
<xsl:template match="node">
<xsl:variable name="me" select="."/>
<xsl:value-of select="./preceding::milestone[
./concat('#',@xml:id) =
$me/following::milestone/@ref
][1]/@xml:id" />
</xsl:template>
과 같이 XSLT로 구현 될 수 있지만 순수한 XPath를 사용하여이를 수행하는 방법을 알 수는 없습니다.
제안 사항?
위의 예제 작업을 수행하는 방법으로 concat ('#', @ xml : id)'앞에'. /'를 제거해야합니다. –
나는 당신이하고 싶은 것을 확실히 모르겠습니다. 입력에 대한 예제로 문항을 확장 할 수 있습니까 (컨텍스트는 ' '요소입니까?) 예상 출력은 무엇입니까? –
필자는 입력에서 XPath 만 읽을 수있는 응용 프로그램에 대한 가져 오기 필터를 준비했습니다 (이후에는 불행히도 알지 못합니다). 애플리케이션은 ' '(즉, 생성 된 ID)과 마일스톤으로 생성 된 구조 사이에 '링크'를 만들어야합니다. 주어진 예에서 'milestone [@xml : id ='m1 ']'은 올바른 출력이 될 것이고,'milestone [@xml : id = 'm2']'는 부정확하다. –
user2496459