2016-12-15 4 views
1

압축 근본적으로 영향을 그 큰 XML 파일의 크기를 줄일 수 있습니다 압축 된 XML의 일부 특정 데이터. 이 Rhino의 자바 스크립트 (주로 자바) 예입니다큰 zip으로 압축 된 XML을 저장하고 일부 특정 데이터 (Alfresco) 만 효율적으로 추출하는 방법은 무엇입니까? 난 단지 추출해야</li> </ul> <p></li> <li>네트워크 사용</p> <ul> <li>저장 공간 사용, IO 대기 (읽기 및 쓰기) :

var zis = new java.util.zip.ZipInputStream(document.properties.content.getInputStream()); 
var ze = zis.getNextEntry(); 
if (ze!=null){ 
    var scanner = new java.util.Scanner(zis,"UTF-8").useDelimiter("\\A"); 
    var content = scanner.hasNext() ? scanner.next() : ""; 
    var docXml = new XML(content); 
    logger.log("xml mytag/text(): "+docXml.mytag); 
} 
zis.closeEntry(); 
zis.close(); 

하지만, (예를 들어 XML 헤더에서) 일부 특정 요소를 추출해야하는 경우 DOM의 전체 XML을로드 할 필요가 없습니다. 알고리즘은 요청 된 모든 항목이 발견되거나 XML 파일을 찾을 기회가 없을 때 XML 파일을 읽지 못하게해야합니다.

Alfresco의 서비스 또는 자바 라이브러리가 있으며, XML을 사용하여 XML에서 요청 된 항목을 추출합니다. StAX2 API (Woodstox)?

+0

쉽지 않습니다. 당신은 무엇을 구하기 위해 무엇을 지정할 것인지 알려줄 수 있습니까? 예를 들어 첫 번째 비 루트 태그, 300 번째 태그, 모두 텍스트 내용 ... 알고있는 한 최대한 빨리 수행 할 수있는 방법이있을 수 있습니다. – GPI

+0

@GPI - 예 : 경로의지도 (해시 맵) – wildloop

+0

Stax2/Woodstox를 사용하여 필요한 XML 부분을 추출한 다음 XPath를 실행할 수 있습니다. 그러나 (세부 사항에있는 악마의 제비) 그것을하는 것은 쉽지 않다. 기술을 설명하는 오래된 [블로그] (http://andreas.haufler.info/2012/01/conveniently-processing-large-xml-files.html)를 발견했으며 관련 소스 코드는 이동했지만 유지 관리 된 것처럼 보입니다 [여기] (https://github.com/scireum/sirius-kernel/tree/master/src/main/java/sirius/kernel/xml). 나는 그것을 사용하지 않았지만 필요한 것만으로 충분할 수도 있습니다. – vanOekel

답변

0

난 당신이 꽤 잘이에 대한 STAX를 사용할 수 있다고 생각 : 다음

XMLInputFactory factory = XMLInputFactory.newInstance(); 
XMLEventReader r = factory.createXMLEventReader 
        (ze.getName(),zis); 

와가의 XMLEventReader를 사용의 XMLEvent으로의 XMLEvent를 참조하십시오. 찾으려는 XML에서 관련 태그와 값을 찾았 으면 r.close()를 호출하면 Stax Parser를 닫고 (zip 입력 스트림은 제외) 다음 zip 항목으로 진행합니다.

+0

감사합니다. StAX를 사용하는 방법을 알고 있습니다. http://stackoverflow.com/questions/41108090/how-to-get-xml-element- 경로 사용 중 stax-stax2 – wildloop