
根据规范,自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); }}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)