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 中运行它时,我得到了这个:歌剧12

正如你所看到的,宽度是被尊重的,但是p标签被分成了两部分,summary标签插入在中间。这可以在 Opera 的检查器中看到:

督察

我需要使用,copy-of而不是value-of,因为我希望&lt;summary&gt;标签包含html标签,如bispan

为什么 Opera 将p标签分成两个空标签并在它们之间插入summary?以及如何避免这种情况,使我能够将标签的内容放在summary标签内p

4

2 回答 2

1

那么 HTML5 有一个summary元素:http://www.w3.org/TR/html5/single-page.html#the-summary-element。目前尚不清楚您是否summary将输入中的元素视为summary要复制到转换结果文档的 HTML5 元素,或者它是否只是您选择的 XML 输入格式中的任意 XML 元素。至于在 IE 和 Opera 中解析的差异,可能是由于summary元素本身对 HTML5 的支持不同或不同的 HTML5 解析实现导致 Opera 似乎将摘要结果元素视为 HTML5 元素并试图移动它属于它的某个地方。正如您在链接的 HTML5 规范中看到的那样,它说的是 HTML5summary元素:“可以使用此元素的上下文:作为详细信息元素的第一个子元素。”。这意味着它在元素中没有位置p,因此它很可能被移到pXSLT 尝试放置它的外部。

因此,您有两个选择,或者像您已经完成的那样仅复制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 回答