2008-09-02 6 views
28

XSD에 대해 큰 XML 파일의 유효성을 검사하는 방법을 찾으려고합니다. 나는 ...best way to validate an XML...이라는 질문을 보았지만 그 대답은 모두 유효성 검사를 위해 Xerces 라이브러리를 사용하는 것을 지적했습니다. 유일한 문제는 그 라이브러리를 사용하여 180MB 파일의 유효성을 검사 할 때 OutOfMemoryException이 발생한다는 것입니다.거대한 XML 파일 유효성 검사

일반적인 XML 파일보다 큰 유효성 검사를위한 다른 도구, 라이브러리, 전략이 있습니까?

편집 : SAX 솔루션은 Java 유효성 검사를 위해 작동하지만 libxml 도구에 대한 다른 두 가지 제안은 Java 외부의 유효성 검사에도 매우 유용합니다.

+1

Windows 도구를 사용하기 쉽도록 Xerces SAX 파서를 사용하는 [XML ValidatorBuddy] (http://www.xml-tools.com/ValidatorBuddy.htm)를 사용할 수 있습니다. 거대한 파일을 내부적으로 검증합니다. – Clemens

답변

30

DOMParser를 사용하는 대신 SAXParser를 사용하십시오. 이것은 입력 스트림이나 판독기에서 읽으므로 XML을 메모리에 모두로드하는 대신 디스크에 보관할 수 있습니다. 검증 을 수행

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

SAXParser parser = factory.newSAXParser(); 

XMLReader reader = parser.getXMLReader(); 
reader.setErrorHandler(new SimpleErrorHandler()); 
reader.parse(new InputSource(new FileReader ("document.xml"))); 
8

사용 libxml는, 스트리밍 모드가 있습니다.

+0

이렇게 보이는 것은 libxml2에서도 올바르게 작동할까요? – oob

+0

@oob 예, libxml2가 완벽하게 작동합니다. 또한 Windows 바이너리를 찾는 사람은 다음과 같습니다. ftp://ftp.zlatkovic.com/libxml/ – sfarbota

2

개인적으로 저는 명령 행 인터페이스가 있고 XMLStarlet을 사용하고 스트림에서 작동합니다. 이것은 Libxml2를 기반으로하는 일련의 도구입니다.

1

이미 언급했듯이 SAX와 libXML이 도움이 될 것입니다. -Xmx 옵션을 사용하여 JVM의 최대 힙 크기를 늘릴 수도 있습니다. 예 : 최대 힙 크기를 512MB로 설정하려면 : java -Xmx512m com.foo.MyClass