2012-04-10 5 views
4

XSLT 템플릿의 경우 특정 자식 요소가 있지만 텍스트 노드가없는 요소를 대상으로하는 XPath식이 필요합니다. 특정 하위 요소가 있지만 텍스트 노드가없는 요소 찾기

<!-- 1: matches --> 
<a><b/></a> 

<!-- 2: does not match --> 
<a>foo bar quux<b/></a> 

<!-- 3: does not match --> 
<a>whatever <b/> further text</a> 

<!-- 4: does not match --> 
<a>whatever <b/> further text <b/></a> 

<!-- 5: does not match --> 
<a><x/><b/></a> 

<!-- 6: does not match --> 
<a>foo bar quux</a> 

나는 a[*[1 = last() and name() = 'b']] 함께했다,하지만 경우 2 또는 3 때해야하지 일치합니다. 그 이유는 물론 *이 요소를 선택하고 텍스트 노드를 신경 쓰지 않기 때문입니다. 그러면 대신 어떻게해야합니까? 당신은 하나의 B, 다른 요소와 텍스트가 찾고 있다면

답변

2

당신은

a[count(*)=1 and b and not(text())] 

를 사용할 수 있습니다. 주의 할 점은 XML로 캐리지 리턴을 사용하면 일부 프로세서가이를 텍스트로 가져옵니다.

+0

또는 = ' b ']) and not (text())] – Woody

+0

완벽한, 고마워! –

+0

@ JensBannmann : 좀 더 작고 간결한 표현에 흥미가있을 수 있습니다 :) –

1

짧은하십시오 b 자식을 갖고, 모든 자식 노드 또는 제 2 엘리먼트 자식이없는

a[b and not(text() or *[2])] 

이 현재 노드 (문맥 노드)의 모든 a 아이를 선택한다.

비록 짧은, 당신은 또한 어떤 PI이 있거나 자녀에게을 언급 싶지 않는 경우! 여러 B의, A [B 아니라 (* 이름()을 수용 할 수있는 경우

a[b and not(node()[2])] 
관련 문제