2013-06-27 2 views
1

Я пытаюсь использовать 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.

ответ

0

Используйте верхний элемент таблицы стилей для определения всех пространств имен:

<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" xmlns:x="adobe:ns:meta/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 

Затем удалите встроенные пространства имен:

<x:xmpmeta> 
<rdf:RDF> 

рекомендации