2012-04-11 3 views
1

저는 Xqilla에서 Xquery를 사용하기 시작했습니다.Xquery 결과의 형식이 올바르지 않습니다.

결과가 올바른 들여 쓰기와 개행으로 반환되기를 바랍니다.

저는 $ duplicates라고하는 디렉터 목록을 가지고 있으며, return 문 내에서이 디렉터의 모든 영화 제목을 가져 오려고합니다.

내 return 문 : 제대로 들여 아이들과 함께

<movie director="Coppola"> 
    <title>The Godfather</title> 
    <title>The Godfather pt. 2</title> 
    <title>Apocalypse Now</title></movie> 

, 각각의 새로운 라인 :이 같은 (종류의) 포맷 할

for $duplicate in $duplicates 
return 
    <movie director="{$duplicate}"> 
    {$result/videos/video/title[../director=$duplicate]}</movie> 

. 단일 행의 모든 ​​타이틀과

<movie director="Coppola"> 
    <title>The Godfather</title><title>The Godfather pt. 2</title><title>Apocalypse Now</title></movie> 

:

은 내가지고있어하는 것은 이것이다.

변수를 단순히 반환하기 만하면 이전에 성공적으로 목록을 반환 했으므로 wikibooks에 제안 된 for 루프를 사용하여 중첩 return 문을 시도했습니다. 이 솔루션에는 명시 적으로 정의 된 <title> 태그도 포함되어 있습니다.

동일한 문제가있는 한 명의 사람이 here에 있습니다.

거기에 대한 답변이 작동하지 않았습니다. 네임 스페이스를 추가하면 프로그램이 완전히 출력되지 않았습니다. 나는 또한 모든 사람들이 처음부터 완벽한 결과물을 얻고있는 것처럼 보이기 때문에 비 kludge 솔루션이 있다면 그것을 선호 할 것이다.

XML 및 Xquery를 곱하기 대괄호 사용으로 혼합하는 문제가있는 것 같습니다.

답변

2

출력 직렬화를 제어하는 ​​플래그 및 옵션의 문제만큼이나 문제가되지 않습니다.

당신이 아마 원하는 것은 set the XQilla format-pretty-print flag to true에, 또는 (XQuery를 3.0)과 같이, 당신의 프롤로그에서 the indent XQuery serialization option를 사용 :이 명령 줄 사용하는 경우

declare option output:indent "yes"; 

당신은 XQuery에 3.0이 없습니다 지원이 가능하다면 XQilla에서 직렬화 옵션을 설정하는 명확한 방법이 없다면 다른 예쁜 인쇄 도구를 사용하여 펀트 할 수도 있습니다. 예를 들어, 배관 출력은 xmlstarlet fo으로 두 번째 단계에서 출력됩니다.

+0

여기서는 xqilla가 문제라고 생각하지 않지만 시도해보고 싶습니다. 나는 gedit과 terminal atm을 사용하고 있는데 어떻게 플래그를 설정할지 모르겠습니다. Xqilla 홈페이지와 구글은 나에게 아무것도주지 않는다. – keyser

+1

@ keyser5053 XQuery 3.0에서 이것을 다음과 같이 당신의 프롤로그에서 할 수있다 :'declare option output : indent = "yes";'. 그 전에는 표준 방법이 없으므로 XQilla 사람들에게 (나는 BaseX, 나 자신을 사용한다.) 질문이다. –

+1

@ keyser5053은 다른 옵션으로 업데이트되었습니다 (예쁜 인쇄/들여 쓰기를 처리하는 별도의 도구로 파이핑). –

관련 문제