0

ここで何が欠けているのかわかりません。出力を XHTML に変換するオプションを使用して XML を出力する Java Web アプリがあります。私のスタイルシートは正常に動作しますが、私の人生では、変換された出力で doctype を書き込むことができません。私の 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 は自分自身を quirks モードに切り替え続け、私の CSS は標準モードに依存しています。

私は Saxon 9.1.0.8 の使用を開始し、8.7 に戻して、それが何か関係があるかどうかを確認しましたが、うまくいきませんでした。トランスフォーマーが doctype の追加を拒否する理由を知っている人はいますか?

編集:

このページ (http://mark-allen.net/notes/layout/frames/example.html) を作成しようとしています。他のテンプレートをコメントアウトするか、それらを適用して独自のコンテンツを div に配置するかは問題ではありません。テンプレートをまったく適用せずに静的 HTML を記述する場合でも、サンプル XML は含めていません。コンテンツ、doctype を書き込むことができません。

    <?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);
4

1 に答える 1

3

最も可能性の高い説明は、スタイルシートの出力がSaxonシリアライザーを使用してシリアル化されていないことです。たとえば、出力をDOMに書き込んでから、DOMのシリアライザーを使用して字句XMLを生成する場合があります。

ただし、これは単なる推測です。変換がどのように実行されているかについての情報は提供されていません。

于 2012-03-02T20:49:55.713 に答える