Java 6中对xinclude的默认支持?

我在我的应用程序中看到,在我的解析XML文件中包含xinclude在我的Java XSLT转换中不起作用。

但是,虽然我这样做:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setXIncludeAware(true); 

我没有专门设置变换器工厂,因为System.getProperty("javax.xml.transform.TransformerFactory")返回“null”。

我的问题:默认的Java(1.6或6)是否支持xinclude,还是我必须添加替代的XSLT解析器,例如Apache Xerces?

根据规范 ,自Java 1.5(5)以来一直支持。 我相信XInclude支持依赖于命名空间感知 ,默认情况下由于向后兼容性原因而关闭。

 public class XIncludeDemo { private static final String XML = "\n" + "\n" + "\n" + "\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); } }