org.xml.sax.SAXParseException; prolog中不允许引用。自动生成XHTML,java

时间:2012-11-20 22:26:20

标签: java xhtml xml-parsing saxparser libreoffice

我只想尝试Flying Saucer从xhtml代码生成PDF。所以我做的是在LibreOffice中创建一个布局,让它生成xhtml代码并(想)将其交给解析库(在java中)以生成pdf。 但是,我无法接管所有xml代码1:1,因为我需要逃避事情..所以我逃脱了所有“<”用“<”和所有“>”用“>”以及带有“\”“的所有双引号。

当试图解析整个事情时,我得到以下错误:

[Fatal Error] :1:2: Reference is not allowed in prolog.

我试图通过一些逻辑思维和谷歌搜索来追踪它。如果我理解以下是我的“序言”:

    buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    buf.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd\">");
    buf.append("<html xmlns=\"http://www.w3.org/1999/xhtml\"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile=\"http://dublincore.org/documents/dcmi-terms/\"><meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=utf-8\"/><title xml:lang=\"en-US\">- no title specified</title><meta name=\"DCTERMS.title\" content=\"\" xml:lang=\"en-US\"/><meta name=\"DCTERMS.language\" content=\"en-US\" scheme=\"DCTERMS.RFC4646\"/><meta name=\"DCTERMS.source\" content=\"http://xml.openoffice.org/odf2xhtml\"/><meta name=\"DCTERMS.issued\" content=\"2012-11-20T20:59:05.11\" scheme=\"DCTERMS.W3CDTF\"/><meta name=\"DCTERMS.provenance\" content=\"\" xml:lang=\"en-US\"/><meta name=\"DCTERMS.subject\" content=\",\" xml:lang=\"en-US\"/><link rel=\"schema.DC\" href=\"http://purl.org/dc/elements/1.1/\" hreflang=\"en\"/><link rel=\"schema.DCTERMS\" href=\"http://purl.org/dc/terms/\" hreflang=\"en\"/><link rel=\"schema.DCTYPE\" href=\"http://purl.org/dc/dcmitype/\" hreflang=\"en\"/><link rel=\"schema.DCAM\" href=\"http://purl.org/dc/dcam/\" hreflang=\"en\"/><style type=\"text/css\">");

对不起那件巨大的(又丑陋的)东西,但是好吧......接下来我做的就是每行注释一下,看看哪里出错了。

如果我注释掉前两行,在第三行后我得到一个不同的错误(“prolog中不允许内容”或类似的话),错误仍会出现

然而,这是第三行..我找不到错误,感谢每一个帮助:)

        buf.append("<html xmlns=\"http://www.w3.org/1999/xhtml\"><!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--><head profile=\"http://dublincore.org/documents/dcmi-terms/\"><meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=utf-8\"/><title xml:lang=\"en-US\">- no title specified</title><meta name=\"DCTERMS.title\" content=\"\" xml:lang=\"en-US\"/><meta name=\"DCTERMS.language\" content=\"en-US\" scheme=\"DCTERMS.RFC4646\"/><meta name=\"DCTERMS.source\" content=\"http://xml.openoffice.org/odf2xhtml\"/><meta name=\"DCTERMS.issued\" content=\"2012-11-20T20:59:05.11\" scheme=\"DCTERMS.W3CDTF\"/><meta name=\"DCTERMS.provenance\" content=\"\" xml:lang=\"en-US\"/><meta name=\"DCTERMS.subject\" content=\",\" xml:lang=\"en-US\"/><link rel=\"schema.DC\" href=\"http://purl.org/dc/elements/1.1/\" hreflang=\"en\"/><link rel=\"schema.DCTERMS\" href=\"http://purl.org/dc/terms/\" hreflang=\"en\"/><link rel=\"schema.DCTYPE\" href=\"http://purl.org/dc/dcmitype/\" hreflang=\"en\"/><link rel=\"schema.DCAM\" href=\"http://purl.org/dc/dcam/\" hreflang=\"en\"/><style type=\"text/css\">");

提前感谢!

edit1:http://validator.w3.org/check验证它完全正确!

1 个答案:

答案 0 :(得分:2)

看来你对this blog article的错误布局感到困惑。如果您下载sample code,您会看到'<'和'>'字符转换为“& lt;”和“& gt;”在作者的实际代码和数据中。

为了获得硬编码Java字符串的引号,你当然必须逃避它们。但是你不应该需要任何这个xml转义。