2017-03-03 1 views
1

는 다음과 같은 XML-문서 생각해의 XPath : 선택 루트, 필터 자식 요소

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

내가 다음 XQuery를/XPath는 표현을 썼다 :

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
    <ins> 
    <id>id_02</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

나는 다음과 같은 출력을 얻기 위해 시도를 :

doc('database/data.xml')/inst[ins/id='id_01']

이 원하는 결과하지만 사람을 제공하지 않습니다 르 문서, 그냥 필터링 조건이있을 것입니다 ..하지만 만약 내가 XML 문서에 존재하지 않는 ID를 넣어, 결과는 비어 있습니다.

나는이 진술에 무엇이 잘못되었는지 모른다.

답변

1

당신이 쓴 XPath에,

/inst[ins/id='id_01'] 

문자열 값 "id_01"을하는 자식 요소와 ins 자식 요소를 포함하는 inst 루트 요소를 선택했다. 당신의 XML의 루트가 참으로이 기준을 충족 않기 때문에, 선택 :

<inst> 
    <ins> 
    <id>id_01</id> 
    <pos>1</pos> 
    </ins> 
    <ins> 
    <id>id_02</id> 
    <pos>1</pos> 
    </ins> 
</inst> 

당신은 대신 XPath를 사용할 수,

/inst/ins[id='id_01'] 

그냥이 XML을 선택,

<ins> 
    <id>id_01</id> 
    <pos>1</pos> 
</ins> 

그러나 루트 요소 을 선택하는 XPath는 두 번째 요소 인 ins 요소가없는 것처럼 보입니다. 그 이유는 XPath가 선택이고 XML 변환이 아니기 때문입니다. 두 번째 (id_02) ins 요소가없는 XML에서 inst 요소를 선택할 수 없습니다. XML을 변환하려면 대신 XSLT를 사용하십시오.

-1

당신은 'EQ'

를 사용하는 그래서 더

<inst>{doc('database/data.xml')/inst/ins[id eq "id_01"]}</inst>
"값 비교"사업자 (EQ, LT 등)

단일 값을 비교하도록 설계되어 같은 - 무언가를 쓸 수 있습니다