Java 6의 XinClude에 대한 기본 지원?
문제
내 응용 프로그램에서 XINCLUDE가 구문 분석 된 XML 파일 내부에서 Java XSLT 변환 내에서 작동하지 않는다는 것을 알 수 있습니다.
그러나 나는하지만 :
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setXIncludeAware(true);
나는 구체적으로 변압기 공장을 다음과 같이 설정하지 않습니다 System.getProperty("javax.xml.transform.TransformerFactory")
"null"을 반환합니다.
내 질문 : 기본 Java (1.6 또는 6)가 XinClude를 지원합니까, 아니면 Apache Xerces와 같은 대체 XSLT 파서를 추가해야합니까?
해결책
에 따르면 사양, Java 1.5 (5) 이후 지원이있었습니다. 나는 XinClude 지원이 의존한다고 생각합니다 네임 스페이스 인식, 역 호환성 이유로 기본적으로 꺼집니다.
public class XIncludeDemo {
private static final String XML = "<?xml version=\"1.0\"?>\n"
+ "<data xmlns=\"foo\" xmlns:xi=\"http://www.w3.org/2001/XInclude\">\n"
+ "<xi:include href=\"include.txt\" parse=\"text\"/>\n"
+ "</data>\n";
private static final String INCLUDE = "Hello, World!";
public static void main(String[] args) throws Exception {
// data
final InputStream xmlStream = new ByteArrayInputStream(XML
.getBytes("UTF-8"));
final InputStream includeStream = new ByteArrayInputStream(INCLUDE
.getBytes("UTF-8"));
// document parser
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setXIncludeAware(true);
factory.setNamespaceAware(true);
DocumentBuilder docBuilder = factory.newDocumentBuilder();
if (!docBuilder.isXIncludeAware()) {
throw new IllegalStateException();
}
docBuilder.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if (systemId.endsWith("include.txt")) {
return new InputSource(includeStream);
}
return null;
}
});
Document doc = docBuilder.parse(xmlStream);
// print result
Source source = new DOMSource(doc);
Result result = new StreamResult(System.out);
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(source, result);
}
}
제휴하지 않습니다 StackOverflow