2017-11-24 1 views
0

dom4j Outpurformat 및 Document 객체를 사용하여 XML 형식을 수행하고 있습니다. 내가 Win -> \r\n and Linux -> \nXMLFormatter 문제가 LF 및 CR의 조합을 사용합니다. LF

내가 한 줄의 XML을 잘 기대하기 EOL (CR LF를) 작업을 파일 전달하면 경우 OS를 기반으로는, lineSeparator을 설정하고

.

그러나 기존의 선이 함께 제공됩니다 어떤 나는 여러 라인 XML 파일을 전달하는 경우 (LF) 신규 라인 (CR LF)

전 함께 제공됩니다 입력 파일 :

<root> 
     <emp> 
     <name>myname</name> 
     </emp> 
    </root> 

출력 :

<root> LF 
    CR LF 
     <emp>LF 
    CR LF 
     <name>myname</name>LF 
    CR LF 
     </emp>LF 
    CR LF 
    </root>LF 
    CR LF 

아직 작동하지 않는 EOL을 교체하려고 시도했습니다. 두 가지 방법으로 시도했습니다.

xmlContent= xmlContent.replaceAll("\n","\r\n") 
xmlContent = xmlContent.replaceAll("\\n","\r\n") 

"LF"로 예상 한대로 Linux에서 정상적으로 작동하지만 위의 문제는 Windows 호스트에서 발생합니다. LF와 CF LF의 결합으로 오는 그것.

+0

출력이 Windows 호스트에서 오는가? – gtosto

+0

예 windows 호스트 –

답변

0

문자열은 Java에서 변경 불가능합니다. 따라서 줄 바꿈을 바꾸고 변수에 지정해야합니다.

  • CR = \ r; - 캐리지 리턴
  • LF = \ n; - 줄 바꿈
  • CRLF = \ 연구 \ 없음 -. 라인

    의 끝

    xmlContent = xmlContent.replaceAll ("\ r에 \ n을", ""). repalceAll ("\ n을", "") repalceAll ("\아르 자형","");;

+0

예 업데이트 된 변수 –

0

dom4j의 동작이 올바른 것으로 보입니다. 들여 쓰기 출력 중에는 개행 (CR + LF for Windows OS)을 추가하기 만하면됩니다. 추가 LF 원래 파일 (유닉스 컨벤션을 사용하는 것 같아요)에서오고있다. xml 파서는 텍스트 노드로 입력의 LF를 해석하므로 출력에서도 얻을 수 있습니다. 당신이

xmlContent = xmlContent.replaceAll("\x0a","") 

을 시도하는 경우 그렇지 않으면 공백

SAXReader xmlReader = new SAXReader(); 
xmlReader.setStripWhitespaceText(true); 

을 무시하도록 XML 리더를 구성 할 수 있지만 너무 요소 내부의 공백에 영향을 미칠 것입니다 무엇.

+0

입력 파일의 모든 행이 LF (Linux 형식)로 EOL로 수정되었다고 언급 했으므로 메모장 ++을 사용하여 Windows 용 EOL로 변환해도 공백과 관련이 없습니다. 포맷터를 사용하면 새로운 줄을 추가 할 때마다 "CR LF"가 제공됩니다. –

+0

어떤 Dom4j 버전을 사용하고 있습니까? – gtosto

+0

dom4j 1.6.1 사용 –

관련 문제