2014-10-15 2 views
3

상당히 간단한 질문이지만 검색, 여기 또는 Google을 통해 원하는 것을 쉽게 찾을 수 없습니다.XML Xpath - 요소 = 복수 값을 선택하십시오.

대부분의 사람들은 여러 조건으로 노드/요소를 선택하는 방법을 묻습니다. 난 당신이 하나 개의 속성에 대해 여러 가능성이있는 경우 그 구문을 단축 할 수있는 방법이 있는지 알고 싶어 URL/books[title="Harry Potter" and author="JKRowling"]

처럼

. 즉

URL/books[price=1 or price=2 or price=3 or price=8 or price=15] 

에서

은 구문을 단축 할 수있는 방법이 있습니까?

마찬가지로 URL/books[price=1,2,3] 또는 [price in (1,2,3)] ---- 분명히 이러한 것은 잘못되었지만 일을 더 쉽게 만듭니다.

답변

3

XPath는 2.0의 XPath에

URL/books[price=(1,2,3)] 

= 연산자 (도 !=, <, >, <=>=)을 허용 할 암시 적 존재 한정사가있을 때 하나 또는 피연산자들의 둘 서열이다 - X = Y 인 true이면 시퀀스의 멤버 X과 같으며 Y 시퀀스의 멤버 인 모든과 같습니다. 이것은 X != Y이 반드시 not(X = Y)과 같을 필요가 없다는 것을 의미합니다. 이전은 일부는 같지 않은 (그리고 다른 쌍도 동일 할 수 있습니다) X 값과 Y 값의 쌍을 의미하며, 후자는 거기에 있음을 의미합니다 아니요 등호입니다.

그러나 XPath 1.0은 이와 같은 원자 값의 시퀀스를 지원하지 않으므로 그 다중 값 데이터 유형은 노드 집합입니다. 어떻게 든 XML의 값 목록과 함께 변수를 삽입 할 수 있다면.

<prices> 
    <price>1</price> 
    <price>2</price> 
    <price>3</price> 
</prices> 

당신은

URL/books[price = $var/prices/price] 

말할 수 있지만 (a)는 당신의 XPath 엔진이 변수 바인딩을 지원하며, (b)는 아마 어쨌든 price = 1 or price = 2 ...을 열거보다 명확 여부와 방법에 따라 달라집니다.

+0

대단히 감사합니다. 실제로 최신 버전을 사용하고 있습니다. 첫 번째 라인이 의미가 있습니다. 구문을 알지 못했기 때문에 내가 수행 한 검색에는 나타나지 않는 것 같습니다. 나는 당신을 업 그레 이드 하겠지만 나는 아직 15 명의 담당자가 없다고 생각한다. –

+1

@JohnBabson 당신은 아직 upvote의 담당자가 없지만 문제를 해결했다고 생각하면 대답을 할 수있다. 대답의 왼쪽에있는 눈금을 클릭하면됩니다. –

관련 문제