2014-05-13 2 views
0

아래 XML이 있는데 xmlquery를 사용하여 LocationOfNode를 가져 오는 데 문제가 있습니다. 진행 방법에 대한 제안이 있으십니까? 달성하려는 목표를 확인하려면 아래 예제를 참조하십시오.노드의 경로를 검색하는 Oracle XmlQuery

<data> 
    <type id="01" desc="Doctors"> 
     <type id="02" desc="Private Hospital"> 
      <type id="03" desc="John"></type> 
      <type id="04" desc="James"></type> 
     </type> 
     <type id="05" desc="Public Hospital"> 
      <type id="06" desc="Jacob"></type> 
      <type id="07" desc="Joseph"></type> 
     </type> 
    </type> 
    <type id="08" desc="Actors"> 
     ........ 
    </type> 
</data> 

예 : 내 입력

입니다

경우 : 07

예상 출력 : 의사/공공 병원/조셉

내가 XMLQUERY로 아래 xmlpath를 사용하는 것을 시도하고있다

SELECT XMLQuery(
'//*[@id="07"]/ancestor::*[@id="01"][1]' 
PASSING MYXMLClob RETURNING CONTENT 
) "myXMLQuery" 
FROM myTable 

답변

0

예상 출력에 따르면 xpath를 기반으로 xpath를 확인하려는 것 같습니다. 그 결과는 그로부터 돌아옵니다. 이 경우 예상 위치를 이미 알고 있으므로 절대 경로를 확인하려고하지만 desc 속성과 관련됩니다.

XPath는 실제로 유효한 쿼리의 경로를 반환하도록 설계되지 않았으므로 다른 점을 사용하는 것이 훨씬 쉽습니다.

substring(concat(//*[@id='07']/../../@desc, '/', //*[@id='07']/../@desc, '/', //*[@id='07']/@desc), 0, number(boolean(count(//*[@id='07']))) * string-length(concat(//*[@id='07']/../../@desc, '/', //*[@id='07']/../@desc, '/', //*[@id='07']/@desc))+1) 

을하지만 동적/복잡한 쿼리에 대해이 작업을 제안하지 것이다 : 당신이 XPath를 사용하여 부착하는 경우에, 당신은과 같이 해결 방법을 적용 할 수 있습니다.

관련 문제