Я пытаюсь использовать Apache FOP для создания документов PDF для приложения, над которым я работаю.Добавление пространства имен в Java (Apache FOP's - JSP) Анализ синтаксического анализа в таблице стилей XSL
Для этого мне нужно создать действительный файл XSL-FO, который компьютер FOP затем анализирует, чтобы отформатировать стиль документов, которые он создает.
XSL-файл имеет собственные пространства имен, которые заставляют FOP-механизм вызывать ошибку при попытке выполнить синтаксический анализ файлов. Я получаю ошибку идет,
org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.checkDOMNSErr(CoreDocumentImpl.java:2526)
at com.sun.org.apache.xerces.internal.dom.AttrNSImpl.setName(AttrNSImpl.java:113)
....
Пример пространств имен в XSL/файл XML:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:altova="http://www.altova">
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
файл кода
ФОП JSP, который разбирает через XSL:
<%@ page import='java.io.*'%>
<%@ page import='org.xml.sax.InputSource'%>
<%@ page import='org.apache.fop.apps.Driver'%>
<%@ page import='org.apache.fop.apps.Options'%>
<%@ page import='oracle.xml.parser.v2.XMLDocument'%>
<%@ page import='oracle.xml.parser.v2.XSLProcessor'%>
<%@ page import='oracle.xml.parser.v2.XSLStylesheet'%>
<%@ page import='oracle.xml.parser.v2.DOMParser'%>
<%
response.setContentType("application/pdf");
XMLDocument v_doc;
XSLStylesheet v_xsl = null;
String v_fop;
DOMParser parser = new DOMParser();
XSLProcessor processor = new XSLProcessor();
// set the encoding for the XML Processing
String v_encode = "UTF-8";
// get the XSL
v_xsl = new XSLStylesheet(new java.io.StringReader(request.getParameter("template")),null);
// get the XML String from the form which was posted
parser.parse(new java.io.StringReader(request.getParameter("xml")));
// get the XML Document
v_doc = parser.getDocument();
// create an output stream to get the transformed results
ByteArrayOutputStream v_out = new ByteArrayOutputStream();
// transform the xml and xsl to get an FOP
processor.processXSL(v_xsl, v_doc, v_out);
// convert the FOP byte array to a string with encoding set above
v_fop = new String(v_out.toByteArray(),v_encode);
//
// Now call the apache FOP processing
//
Driver driver = new Driver();
// set the desired output
// see http://xml.apache.org/fop/output.html for all output types
driver.setRenderer(Driver.RENDER_PDF);
// set the input for the FOP engine
driver.setInputSource(new InputSource(new StringReader(v_fop)));
// set the output to stream to the browser
driver.setOutputStream(response.getOutputStream());
// process
driver.run();
%>
Теперь Adding namespace to an already created XML document говорит о чем-то в тех же строках, где мне нужно добавить код, похожий на .setAttributeNS («http://www.w3.org/2000/xmlns/», «xmlns: ns2», «http : // "); к моему JSP для того, чтобы понять пространства имен XML и преодолеть ошибку NAMESPACE_ERR.
Я не являюсь Java-парнем и буду признателен за любую помощь в отношении кода, с которым мне нужно работать.
Thanks, Mitt.