XSLT отказывается писать декларацию DOCTYPE - PullRequest
0 голосов
/ 02 марта 2012

Я не могу понять, чего мне здесь не хватает.У меня есть веб-приложение Java, которое выводит XML с возможностью преобразования вывода в XHTML.Моя таблица стилей работает нормально, но на всю жизнь я не могу получить преобразованный вывод для записи типа документа.Первый дочерний элемент под моим элементом xsl: stylesheet:

<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />

Даже если я запишу вывод в System.out, я могу убедиться, что он не поместит объявление doctype вверху.К сожалению, IE9 продолжает переключаться в режим причуд при открытии этого документа, и мой CSS опирается на режим стандартов.

Я начал использовать Saxon 9.1.0.8 и просто вернулся к 8.7, чтобы посмотреть, имеет ли это какое-либо отношение к немуно не повезло.У кого-нибудь есть идеи, почему преобразователь отказывается добавлять тип документа?

РЕДАКТИРОВАТЬ:

Я просто пытаюсь создать эту страницу (http://mark -allen.net / notes / layout / frames/example.html).Неважно, если я закомментирую другие мои шаблоны или применю их и добавлю свой собственный контент в div - я не включаю образец XML, потому что даже когда я вообще не применяю никаких шаблонов и просто пишу статический HTMLсодержание, я не могу заставить его написать тип документа.

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />

    <xsl:param name="restUrl" />
    <xsl:param name="resourcesUrl" />

    <xsl:variable name="space"><xsl:text> </xsl:text></xsl:variable>

    <xsl:template match="sos:Capabilities"> 
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <title>Capabilities</title>
                  <style type="text/css">
    body {
        margin:0;
        padding:0 10px 0 10px;
        height:100%;
        overflow-y:auto;
    }

    #header {
        display:block;
        top:0px;
        left:0px;
        width:100%;
        height: 100px;
        position:fixed;
        clear: both;
        border-bottom : 2px solid #cccccc;
                background-color: black;
    }

    #header p.description {
            color: #FF0000;
    }

    #navigation {
        display:block;
        top:120px;
        left:0px;
        width:380px;
        height: 100%;
        position:fixed;
        border:1px solid #00FF00;
    }

    #navigation p.description {
            color: #00FF00;
    }

    #content {
        margin:100px 0px 60px 380px;
        display:block;
        padding:10px;
        border:1px solid #0000FF;
    }

    #content p.description {
        color: #0000FF;
    }

         #footer {
                position: fixed;
                width: 100%;
                height: 60px;
                right: 0;
                bottom: 0;

                border-top : 2px solid #cccccc;
                background-color: black;
                background-image: url("../images/saic.gif");
                background-position: right bottom;
                background-repeat: no-repeat;
         }

    * html #header {position:absolute;}
    * html #navigation {position:absolute;}

            </style>
            </head>
            <body>
                <div id="header">
                    This is my header
                </div>
                <div id="navigation"> 
                     Navigation
                </div>
                <div id="content">
                    <p>lots of random text just to test</p>
                 </div>
                 <div id="footer">
                     footer
                 </div>    
              </body>
         </html>
    </xsl:template>
</xsl:stylesheet>

EDIT2:

Вот мой код преобразования в двух словах:

System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
            org.dom4j.io.DocumentSource source = new DocumentSource(queryResponseDocument);
            Source xsltSource = new StreamSource(new File(contextPath, xsltFileName));
            org.dom4j.io.DocumentResult result = new DocumentResult();

            TransformerFactory transFact = TransformerFactory.newInstance();
            Transformer trans = transFact.newTransformer(xsltSource);
            trans.transform(source, result);
            transformedQueryResponse = result.getDocument();
            response.setContentType(mimeType);
            org.dom4j.io.OutputFormat format = OutputFormat.createPrettyPrint();
            org.dom4j.io.XMLWriter writer = new XMLWriter(response.getOutputStream(), format);

1 Ответ

3 голосов
/ 03 марта 2012

Наиболее вероятным объяснением является то, что вывод таблицы стилей не сериализуется с помощью сериализатора Saxon. Например, вы можете записывать вывод в DOM, а затем использовать сериализатор DOM для создания лексического XML.

Однако это только предположение - вы не предоставили никакой информации о том, как выполняется преобразование.

...