2017-10-23 4 views
-2

아래 요청을 위해 xquery에 붙어 있습니다. 형식 값을 기반으로 주소를 선택하고 싶습니다. 즉 유형 "StreetAddress"인 경우 다음 선택 freeFormat "맥과이어"특정 값을 기준으로 값을 선택하는 xquery/xslt

<associatedAddress> 
    <address xmlns="http://services.oracle.com/v1.0/Common"> 
     <type xmlns="http://services.oracle.com/v1.0/Common">StreetAddress</type> 
     <freeFormat xmlns="http://services.oracle.com/v1.0/Common">Maguire</freeFormat> 
    </address> 
    <address> 
     <type xmlns="http://services.oracle.com/v1.0/Common">CityAddress</type> 
     <freeFormat xmlns="http://services.oracle.com/v1.0/Common">SanFransisco</freeFormat> 
    </address> 
</associatedAddress> 

나는 방법 중 몇 시도 : 다음 associatedAddress/address/type="StreetAddress" 경우 ..하지만이 사람은 나에게

I를 첫 번째 주소를 제공합니다 또한 for 루프를 사용하려고 시도하고 그 안에 케이스가있는 경우에도 사용하면 그만큼 첫 번째 주소가 표시됩니다.

다른 옵션을 알려주세요. <type>의 값을 사용하여 값 Maguire를 가져 오는 주셔서 감사합니다

답변

0

는 XPath 당신은 값을 가져 오는 때 입력 XML의 다른 요소와 관련된 namespace을 돌볼 필요가

<xsl:value-of select="associatedAddress/address[type='StreetAddress']/freeFormat" /> 

입니다. 네임 스페이스가 XSL에서 제대로 처리되지 않으면 값이 추출되지 않습니다. 이

0

당신이 당신의 입력 XML 주어진 XQuery를 요구하기 때문에, :

declare namespace common="http://services.oracle.com/v1.0/Common"; 

for $n in associatedAddress//common:type[. = "StreetAddress"] 
return 
    $n/../common:freeFormat 

원하는 결과를 생성은

<freeFormat xmlns="http://services.oracle.com/v1.0/Common">Maguire</freeFormat> 

트릭은 당신의 입력 XML associatedAddress는 같은 네임 스페이스로하지 않습니다에 다른 요소가 있으므로이 점을 고려하여 쿼리를 조정해야합니다.

if 절을 언급했지만 원하는 출력이 사용자 질문에서 무엇인지 분명하지 않습니다. 아래에서 템플릿을 사용하여 결과를 수정할 수 있습니다.

declare namespace common="http://services.oracle.com/v1.0/Common"; 

for $n in associatedAddress//common:type 
return 
    switch($n) 
    case "StreetAddress" return $n/../common:freeFormat 
    case "CityAddress" return "something else" 
    default 
     return()