Java 6 中对 xinclude 的默认支持?

编程入门 行业动态 更新时间:2024-10-28 20:23:28
本文介绍了Java 6 中对 xinclude 的默认支持?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I see in my application that xinclude inside my parsed XML file does not work within my Java XSLT conversion.

然而,虽然我这样做:

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

我没有专门将转换器工厂设置为 System.getProperty("javax.xml.transform.TransformerFactory") 返回null".

I'm not specifically setting the transformer factory as System.getProperty("javax.xml.transform.TransformerFactory") returns "null".

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

My question: does the default Java (1.6 or 6) support xinclude or do I have to add an alternative XSLT parser such as Apache Xerces?

推荐答案

根据 规范,从 Java 1.5 (5) 开始就提供支持.我相信 XInclude 支持依赖于 命名空间感知,出于向后兼容的原因,默认情况下该功能处于关闭状态.

According to the spec, support has been there since Java 1.5 (5). I believe XInclude support relies on namespace awareness, which is turned off by default for backwards compatibility reasons.

public class XIncludeDemo { private static final String XML = "<?xml version="1.0"?> " + "<data xmlns="foo" xmlns:xi="www.w3/2001/XInclude"> " + "<xi:include href="include.txt" parse="text"/> " + "</data> "; 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 的默认支持?

本文发布于:2023-10-05 12:24:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1467369.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中对   Java   xinclude

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!