2017-05-19 10 views
3

내 목표는 Saxon을 사용하여 XML에서 CSV 파일을 생성하는 것입니다. 첫 번째 결과 선 후 각 행에 대한 결과 슨의 아래 (! 간략화)는 XQuery (PE, 9.7.0.15)를 실행하고있는 경우, 부가적인 공간이 추가된다XML을 텍스트 (CSV)로 직렬화 할 때 추가 공백을 방지하는 방법

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 

declare option output:method "text"; 

let $document := <A> 
        <B><C>1</C><D>2</D></B> 
        <B><C>3</C><D>4</D></B> 
        <B><C>5</C><D>6</D></B> 
       </A> 

for $b in $document/B 
return string-join(for $x in $b/* return $x, ",") || "&#xa;" 

결과 :

1,2 
3,4 
5,6 

'깨끗한'방법으로이 추가 공간을 제거 할 수 없습니다 (즉, 결과 처리 후 처리 없음).

'깨끗한'CSV (텍스트) 파일을 생성하는 방법에 대한 아이디어가 있으십니까?

답변

3

나는 유일한의 누락이이 외부 문자열 조인이라고 생각한다 완성도를 들어

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization"; 

declare option output:method "text"; 

string-join(
    let $document := <A> 
        <B><C>1</C><D>2</D></B> 
        <B><C>3</C><D>4</D></B> 
        <B><C>5</C><D>6</D></B> 
        </A> 
    for $b in $document/B 
    return string-join(for $x in $b/* return $x, ","), 

    "&#xa;" 
) 
1

가 쿼리를 수정이 필요없는 두 번째 대답이있다.

기본적으로 일련 화 시간에 항목간에 추가 공백이 추가됩니다.

원래 쿼리는 빈 문자열로 일련 화 매개 변수 item-separator을 설정하면 원하는 출력을 출력합니다 (여분의 공백없이). 기본 동작을 무시합니다. 각 엔진에는 그렇게하는 API가 있습니다. 조르바를 들어

!item-separator='' 

: XQuery를 3.x를위한

-z item-separator='' 
+0

은 표준 직렬화 옵션이 있습니다 : HTTPS 색슨를 들어

, 나는 그 명령 행이 전달 같은 것을있을 거라고 생각 : //www.w3.org/TR/xslt-xquery-serialization-31/#XML_ITEM- SEPARATOR하지만 그건 나에게 도움이되지 못했다. (미안하다.) – DiZzZz