2012-09-10 2 views
0

다음 구조의 로그 파일이 있습니다.Java에서 로그 파일을 구문 분석하기위한 라이브러리

unstructured raw text 
unstructured raw text 
.. 
.. 
.. 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<message> 
... 
... 
</message> 

unstructured raw text 
.. 
.. 


<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<message> 
... 
... 
</message> 

unstructured raw text 
.. 
.. 

하나의 단일 로그 파일에 여러 개의 XML 문서가 포함되어 있습니다. 내 자신의 무언가를 쓰기 시작하기 전에 여기서 재사용 할 수있는 일반적인 유틸리티 나 라이브러리가 있는지 궁금합니다. Java에서 필요합니다.

감사합니다.

+2

그 디자인은 당신의 인생은 그것이 필요로하는 것보다 훨씬 더 어렵습니다. XML과 XML 툴체인을 사용하려면 XML을 사용해야합니다. 최상위 수준에 원시 텍스트 포함을 중지하고 대신 전체 파일을 단일 XML 문서로 만듭니다. 파싱 ​​수명을 획기적으로 단축시킬 것입니다. –

+0

@ 행크 - 파일을 쓰지 않을 것입니다. 다른 시스템에서 파일을 가져옵니다. 나는 그것을 파싱하고 내 시스템의 XML 노드 내부에있는 정보를 사용해야한다. –

+0

그럴 경우 행운을 빈다. 기본적으로 손으로 추악한 해킹을 시도 할 것입니다 : ''줄을 찾고, 마지막 닫기 태그를 찾을 때까지 백업하고, 그 두 지점 사이의 모든 것을 삭제하거나 무시하십시오. 그런 종류의 일. 솔직히 파일 형식을 업스트림으로 수정할 수있는 방법이 있다면 작업을 훨씬 쉽게 할 수 있습니다. –

답변

0

StAX 기반 파서 중 하나를 선호한다고 가정하면 Woodstox 매개 변수가 특히 유용합니다. 그런 다음 다른 유형의 XML 구문 분석기를 사용해야하는 경우 파서의 이벤트를 생성기로 분기하고 예를 들어 XML 형식으로 XML을 공급할 수 있습니다. DOM 기반 파서 또는 SAX 기반 파서 (자포자기 인 경우 ... SAX는 사용할 파서의 통증이므로).

이 같은 조금 보이는 의사 코드가됩니다

BufferedReader br = ... 
XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
Pattern startOfXml = Pattern.compile("<\\?xml.*\\?>"); 
String line; 
while (null != (line = br.readLine()) { 
    if (startOfXml.matcher(line).matches()) { 
     XMLEventReader xr = inputFactory.createXMLEventFactory(br); 
     XMLEvent event; 
     while (!(event = xr.nextEvent()).isEndDocument()) { 
      // do whatever you want with the event 
     } 
    } else { 
     // do whatever you want with the plain-text 
    } 
} 

특정 모드의 경우 StAX 파서의 일부는 isEndDocument (에 이의를 제기 할 수있다) 그 경우는 이벤트 레벨을 계산해야합니다 문서를 파싱하고 루트 수준의 끝 요소에 도달하면 중 단됩니다. 또한 일부 파서는 문서가 끝난 후 몇 개의 문자를 캐싱 할 수 있습니다 ... 최악의 경우 파서가 끝 요소 뒤에 텍스트를 알릴 때 "잘못된 형식의"문서에 대한 예외를 catch하면됩니다

0

내장 된 xml 파서를 java에 사용할 수 있지만 XML 만 입력해야합니다. 따라서 XML 인 파일의 일부를 String으로 읽은 다음 String으로 파싱해야합니다. 문자열을 XML로 구문 분석하는 방법을 모르는 경우 여기를 참조하십시오. In Java, how do I parse XML as a String instead of a file?

관련 문제