2016-10-04 6 views
1

XPath라는 마법을 이해하려고 애쓰는 데 심각한 문제가 있습니다. 나는 우리가 C의없이, 얼마나 많은 B의 계산하려면 지금XPath 1.0에서 네임 스페이스를 무시하는 방법은 무엇입니까?

<a> 
    <b> 
     <c/> 
    </b> 
</a> 

:

는 기본적으로, 어떤 XML과 같이 있습니다. 이것은 다음과 같은 XPath를 쉽게 수행 할 수 있습니다

count(*/b[not(descendant::c)]) 

이제 질문이 간단하다 : 어떤 네임 스페이스를 무시하고 내가 같은 일을 어떻게해야합니까?

나는이게 뭔가라고 상상합니까?

count(*/[local-name()='b']/[not(descendant::[local-name()='c'])]) 

그러나 이것은 올바르지 않습니다. 위와 동일한 XPath가 무엇이 겠지만 네임 스페이스를 무시합니까? 그것은 일반적으로 제대로 작동하도록 뿐이다 네임 스페이스를 패배하지 않는 것이 좋다

count(*[local-name()='b' and not(descendant::*[local-name()='c'])]) 

하는 것으로 다음과 같이

+1

XPath 1.0에 대해 구체적으로 묻는 분이라면 질문에 명확하게 기재하십시오. XPath 2.0 및 3.0에서는 임의의 네임 스페이스에서 로컬 이름이 c 인 요소를 선택하기 위해 * : c를 쓸 수 있습니다. –

+1

OP는 질문에 xpath-1.0으로 명시 적으로 태그를 붙였습니다.하지만 제목 편집에서 내가 작성 했어야합니다. 이제 해결되었습니다. – kjhughes

+0

괜찮 았어. 그 주제를 xpath-1.0으로 태그하는 것으로 충분하다고 가정했습니다. 나는 다음 번에 그것을 주제에 확실히 추가 할 것이다. – Kahn

답변

2

주어진 XPath에,

count(*/b[not(descendant::c)]) 

는 네임 스페이스를 무시하고 다시 쓸 수 있습니다 네임 스페이스 접두사를 할당하고 XPath 표현식에서 사용합니다.

+0

달콤한, 고마워요! 실제 시나리오가이 결정 이전에 여러 요소를 가지고 있을지 궁금해 할 때까지 조금 더 많은 시간을 할애해야했지만, 결국 거기에 도달했습니다. 그리고 네임 스페이스에 대해서 들었 습니다만,이 경우 XML 부분을 검증했습니다. 이것은 기본적으로 우리가 특별히 네임 스페이스에 의존하기를 원하지 않는 코드 숨김 체크입니다. – Kahn

관련 문제