gpt4 book ai didi

java - Java 6 中默认支持 xinclude 吗?

转载 作者:行者123 更新时间:2023-12-01 05:46:33 25 4
gpt4 key购买 nike

我在我的应用程序中看到,已解析的 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?

最佳答案

根据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 - Java 6 中默认支持 xinclude 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com