Java 6 中对 xinclude 的默认支持?
Posted
技术标签:
【中文标题】Java 6 中对 xinclude 的默认支持?【英文标题】:Default support for xinclude in Java 6? 【发布时间】:2010-10-09 13:51:37 【问题描述】:我在我的应用程序中看到我解析的 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?
【问题讨论】:
【参考方案1】:根据the spec,从 Java 1.5 (5) 开始就提供支持。我相信 XInclude 支持依赖于namespace awareness,出于向后兼容性的原因,默认情况下它是关闭的。
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);
【讨论】:
感谢您提供的信息。我需要一些时间来申请它,看看我是否可以接受。然而,你给我的信息正是我所需要的。 谢谢,正是我想要的!以上是关于Java 6 中对 xinclude 的默认支持?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA8中对List<map<String,Object>>根据map某个value值进行排序,还支持中文排序,可以替代order by