2014-09-25 1 views
0

SQL 데이터베이스와 매우 유사한 XML 문서 집합을 쿼리하고 구문 분석하기 위해 XPath 및 하위 집합 XQuery를 배우기 시작했습니다.XPath/XQuery에서 둘 이상의 요소 집합을 반환하려면 어떻게해야합니까? 복잡한 문서 URL을 변수에 저장할 수 있습니까?

첫 번째 질문은 어떻게 특정 쿼리에 대해 둘 이상의 관련 요소를 쉽게 반환합니까?

예를 들어

, 여기 내 샘플 XPath 쿼리의 (? XXXfakeURL.xml 사용자 = 사용자 이름; PWD = mypassword)

문서 // 일정 [직원 ID = 1425 및 활동 ID = 2058]/time-start

특정 XML 문서를 열고 특정 직원 및 활동이있는 일정 요소를 찾고 "time-start"요소를 반환합니다.

그러나 노드에서 여러 자식 요소를 반환하려면 어떻게해야합니까? 마찬가지로, 시간 시작뿐 아니라 시간 종료, 작업 그룹, 다른 것들, 어쩌구 저쩌구, 등등. 나는 그 전체 경로를 다시 입력하고 싶지 않습니다.

지금은 [자세한 쿼리]/node() [position() = 4 또는 position = (7)]을 수행 할 수 있음을 발견했습니다.

아마 이상적이지 않은 코드를 통해 여러 요소를 반환하는 대신 여러 가지 위치에서 노드를 반환합니다.

다른 변수는 URL 이름을 XML 변수에 저장할 수 있는지입니다.

것을 저장하는 방법이 있나요 :

처럼 내가 자주 문서 ("? 8888/일정/1032/직원/3230/planninggroup/2014.xml 사용자 = 홍길동 & amppwd = mysecretpassword locolhost")를 참조 말한다 변수에 문서가 있습니까? 아니면 적어도 더 짧게 만드시겠습니까?

나는이 응용 프로그램에서 "데이터"를 구성하는 수백 개의 XML 문서를 문자 그대로 가지고 있으므로 한 문서 URL을 다시 사용할 수 없을 수도 있다고 생각합니다. 내 코드는 직원 목록을위한 거대한 URL 문서, 일정을위한 또 다른 거대한 URL 문서를 호출해야하기 때문에 혼란스러워 보입니다. 모두 사무실에서 일하는 것을 결정하기 위해 ---- 왜 이것이 하나의 문서에 들어 있지 않은지, 나는 잘 모르겠다. 간단한 일을하는 나는 완전히 당신이 뭘하려는 건지 이해가 확실하지 않다

답변

0

,하지만 한 가지 방법은 작은 재사용 기능을 작성하는 것입니다 : 방법

declare function local:planning-group(
    $user as xs:string, 
    $pwd as xs:string 
) as document-node() 
{ 
    doc(concat(
    "localhost:8888/schedule/1032/employees/3230/planninggroup/2014.xml?", 
    "user=", $user, "&amppwd=", $pwd)) 
}; 

local:planning-group("johnsmith", "mysecretpassword") 

당신은 구성 할 수 있으며, 과부하 기능을하는 URL의 모든 변수를 설명 할 수있게 해주면 상당히 정돈 ​​될 것입니다. 예를 들어, 기본값을 쉽게 구성하려는 경우 일부 값을 전역 변수로 저장할 수 있습니다. 그런 다음이 2-param 함수는 기본값 (localhost : 8888, 1032, 3230 등)을 사용할 수 있습니다. 그런 다음 다른 2-, param 함수는 선택적으로 매개 변수를 무시할 수 있습니다.

, 당신은 괄호를 사용하여 XPath를 사용하여 여러 노드를 반환하려면 다음

doc(...)//schedule[...]/(time-start | time-end | work-group) 
0

제가 해당 노드에서 여러 자식 요소를 반환하려면?마찬가지로,

뿐만 아니라 시간이 시작뿐만 아니라, 시간 종료, 작업 그룹, 다른 물건,

EXPR/(time-start, time-end, work-group, other-stuff) 

등으로 EXPR/time-start을 대체 내가 자주 "(문서를 참조 locolhost 말 : 8888/일정/1032/직원/3230/planninggroup/2014.xml? 사용자 = 홍길동 & amppwd = mysecretpassword ")를

는 변수에 해당 문서를 저장하는 방법이 있나요?

는 XQuery에서

및 XPath는 3.0에서, 당신은 XPath를 2.0에서이 목적을 위해 표현은 "학대"할 수

let $doc := doc("long uri here") 
return $doc/a/b/c/d 

작성할 수 있습니다

for $doc in doc("long uri here") 
return $doc/a/b/c/d 
관련 문제