나는 아래와 같이 파일을 구문 분석하는 JDOM과 XPath를 사용하여 XML 파일을 구문 분석하는 과정이 있습니다구문 분석 잘못된/불완전한/잘못된 XML 파일
private static SAXBuilder builder = null;
private static Document doc = null;
private static XPath xpathInstance = null;
builder = new SAXBuilder();
Text list = null;
try {
doc = builder.build(new StringReader(xmldocument));
} catch (JDOMException e) {
throw new Exception(e);
}
try {
xpathInstance = XPath.newInstance("//book[author='Neal Stephenson']/title/text()");
list = (Text) xpathInstance.selectSingleNode(doc);
} catch (JDOMException e) {
throw new Exception(e);
}
는 위의 잘 작동합니다. xpath 표현식은 특성 파일에 저장되어 언제든지 변경할 수 있습니다. 이제 xml 파일을 4000 바이트 청크로 보낼 레거시 시스템에서 오는 xml 파일을 더 처리해야합니다. 기존 처리는 4000 바이트의 청크를 읽고 각각의 청크를 데이터베이스의 하나의 행으로 저장하여 Oracle 데이터베이스에 저장합니다 (레거시 시스템을 변경하거나 데이터베이스의 행이 청크를 저장하는 처리가 문제가되지 않음) .
특정 xml 문서와 관련된 모든 행을 추출하고 병합 한 다음 위의 기존 처리 (xml 문서를 구문 분석)를 사용하여 완전한 유효한 XML 문서를 작성할 수 있습니다.
하지만 XML 문서에서 추출해야하는 데이터는 항상 처음 4000 바이트에 있습니다. 이 덩어리는 불완전하지만 필요한 모든 데이터를 포함하므로 유효한 XML 문서가 아닙니다. 나는 JDOM 빌더가 그것을 거부 할 것이므로 하나의 청크만을 파싱 할 수 없다.
올바른 XML 문서를 얻기 위해 모든 부분을 병합하지 않고 조작 된 XML 청크를 구문 분석 할 수 있는지 궁금합니다. 이렇게하면 청크가 사용 가능한지 확인하기 위해 데이터베이스로의 여러 번 이동하는 시간을 절약 할 수 있으며 처음 4000 바이트를 사용할 수있는 경우에만 100 개의 청크를 병합하지 않아도됩니다.
필자는 아마도 관련 데이터를 추출하기 위해 java의 문자열 함수를 사용할 수 있지만 파서 또는 xpath를 사용하여 가능하다고 알고 있습니다. 또는 XML 문서를 구문 분석하기 전에 XML 문서가 잘 구성된 문서라고 기대합니까?
덕분에 -이 HTML 문서에 고유 한 생각합니다. HTML로 작업하지 않습니다. – ziggy
@ziggy : parseFragment() 시도해주세요! 내 업데이트를 참조하십시오. – Vlad
아하 흥미 롭군요. 제가 확인하겠습니다. 감사합니다 – ziggy