1

Operaがpタグを分割すべきでない場所で分割することに問題があります。

XMLの例を次に示します。

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="temp.xsl"?>
<data>
    <item name="car">
        <summary>It goes by land.</summary>
    </item>
    <item name="plane">
        <summary>It simply flies.</summary>
    </item>
</data>

XSLは次のとおりです。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/data">
        <html>
            <link rel="stylesheet" type="text/css" href="temp.css"/>
            <body>
                <xsl:for-each select="item">
                    <h1><xsl:value-of select="@name"/></h1>
                    <xsl:if test="count(summary)&gt;0">
                        <p class="summary"><xsl:copy-of select="summary" /></p>
                    </xsl:if>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

およびCSS:

body { 
    font-size:14px;  text-align:center;  width:400px;  margin:0 auto; font-family:Verdana; 
}

h1 { 
    color: #231F20;  font-size: 1.2em; 
} 

.summary { 
    text-align: justify; padding: 1em; background-color: #F0F4F8;
    border-left: 1px solid #BBB; border-right: 1px solid #BBB; 
}

IE9でこれを実行すると、次のようになります。 IE9

IE9は本体の幅を尊重しませんでしたが、それは重要ではありません。XSLTはデータを正しく変換しました。summaryxmlタグは、。のp付いたタグの間に配置されclass="summary"ます。

しかし、これをOpera 12で実行すると、次のようになります。Opera12

ご覧のとおり、幅は尊重されていますが、pタグは2つに分割され、summaryその間にタグが挿入されています。これは、Operaのインスペクターで確認できます。

インスペクター

タグに、、、、などのタグが含まれていることを期待しているため、copy-ofの代わりに使用する必要があります。value-of&lt;summary&gt;htmlbispan

Operaがpタグを2つの空のタグに分割しsummary、それらの間に挿入するのはなぜですか?そして、これを回避して、タグの内容をsummaryタグ内に配置できるようにするにはどうすればpよいですか?

4

2 に答える 2

1

HTML5にはsummary要素があります:http ://www.w3.org/TR/html5/single-page.html#the-summary-element 。summary入力内の要素を、変換の結果ドキュメントにコピーするHTML5summary要素と見なすのか、それとも選択したXML入力形式の単なる任意のXML要素であると見なすのかは明確ではありません。IEとOperaでの解析の違いについては、要素自体に関するHTML5のサポートが異なるsummaryか、Operaがサマリー結果要素をHTML5要素として扱い、移動しようとしているように見えるHTML5解析の実装が異なることが原因である可能性があります。それが属する場所です。リンクされたHTML5仕様に見られるように、それはHTML5について述べていますsummaryelement: "この要素を使用できるコンテキスト:details要素の最初の子として。"。つまり、要素内に場所がないため、XSLTが要素内に配置しようとするp外部に移動される可能性があります。p

したがって、2つの選択肢があります。すでに行ったようsummaryに、要素の子ノードのみをコピーするか、XSLTを変更して、HTML5がその要素に指定する適切なコンテキストでクリーンなHTML5を作成します。summary

于 2012-10-26T09:33:58.577 に答える
0

私はそれを変更することを発見しました

<p class="summary"><xsl:copy-of select="summary" /></p>

の中へ

<p class="summary"><xsl:copy-of select="summary/node()" /></p>

問題を解決します。

しかし、なぜブラウザ間で違いがあるのか​​わかりません。

于 2012-10-26T06:48:16.850 に答える