2010-01-19 7 views
0

저는 XQuery를 사용하여 완전히 멍청한데, 시작하기 전에 깊이 찾고있는 일부 전문가의 조언을 구하고 싶습니다. 정확한 방향으로 XQuery - "ban"목록에있는 해당 하위 요소를 기반으로 노드를 제거하십시오.

문제 : 아래의 예 (등등 암호 액세스 권한 등) 사용자 및 액세스 정보의 전체를 많이 포함하는 거대한 XML 파일 :

<user> 
    <name>JC1234</name> 
    <password>popstar</password> 
    <accesslevel>0</accesslevel> 
</user> 
<user> 
    <name>AHkl</name> 
    <password>Rudy10!</password> 
    <accesslevel>2</accesslevel> 
</user> 

내가 (사용자 이름 목록을 CSV 파일) 그 거대한 XML 파일에서 제거해야합니다. 그 결과는 제거 된 사용자가 아닌 새 XML 파일이어야합니다 ....

이것은 XQuery에서 실현 가능합니까? 신속하고 더러운 해결책에 대한 조언을 환영합니다!

답변

1

대부분의 구현에는 분석되지 않는 텍스트 기능 또는 유사한 기능이 있지만 바닐라 XQuery 1.0에서는 CSV 파일을로드하는 표준 방법이 없습니다. 그렇지 않으면 파일의 내용을 매개 변수로 전달할 수 있습니다.

CSV 파일

은 토큰 화 기능을 사용하여 분석 할 수 있습니다

declare variable $names = tokenize(unparsed-text("banned.csv"), ",") 

그리고 실제 쿼리는 매우 간단합니다. 문서를 가정하면 XML 파일이 다른 데이터를 많이 포함하고 있지만 다음 XSLT의 템플릿 시설을 더 유용하게 사용할 수있는 경우가 <user /> 노드의 단지 목록을 포함하는 단편은 다음 쿼리는 단순히

doc("users.xml")/user[not(name=$names)] 

입니다.

관련 문제