2017-03-23 8 views
2

XPath 1.0에는 노드 I을 기반으로 XML의 다른 노드를 참조 할 때 유용하게 사용되는 전류()이 있습니다. 그 순간에. 내가 파라에게 노드를 처리 할 때 나는 때때로 객체 노드에 정보를 조회 이와 같은 XPath 표현식을 사용XPath 2.0 : 현재 노드를 선택하는 방법 - 더 이상 사용할 수없는 전류

<root> 
    <book> 
     <chapter> 
      <section> 
       <para> 
        <image id="1">1.png</image> 
       </para> 
      </section> 
     </chapter> 
    </book> 
    <objects> 
     <Object> 
      <ID>1</ID> 
     </Object> 
    </objects> 
</root> 

: 내 XML이 같은 구조를 가지고

Object[ID=current()/descendant::image[1]/@id] 

파서를 XPath 2.0으로 전환하면이 표현식에서 오류가 발생합니다 (현재 함수를 사용할 수 없음).

일부 검색을 수행했지만이 기능을 곧바로 대체 할 수는 없습니다. 하나 있습니까?

답변

2

current() 함수는 XPath가 아니라 XSLT에 정의되어 있습니다. XSLT 1.0, 2.0 및 3.0 스타일 시트의 XPath 표현식에서 사용할 수 있지만 독립형 XPath에서는 사용할 수 없습니다 (비 호환 확장명을 제외한 모든 버전에서 사용할 수 있음).

는 XPath는 2.0에서 변수를 사용하여 해결 방법있다 :

Object[ID=current()/descendant::image[1]/@id] 

내가 산소 15.0에서의 XPath/XQuery를 빌더를 사용하고

for $x in descendant::image[1]/@id return Object[ID=$x] 
+0

된다. XPath 1.0을 사용하도록 설정하면 쿼리를 수락하고 XPath 2.0을 사용하도록 설정하면 오류가 나타납니다. 좀 더 시험 할게. – Hobbes

+0

다음은 산소 문제입니다. –

+0

@Hobbes - oXygen 16.1에서도 그 동작을 재현 할 수 있습니다. 어쩌면 [oXygen 포럼] (https://www.oxygenxml.com/forum/)을 검색/게시 해보십시오. –

2

current() 함수는 XSLT (모든 버전)에서만 사용할 수 있습니다. XPath (모든 버전)에서는 사용할 수 없습니다.

"Additional Functions"섹션의 current() 기능 설명을 참조하십시오.