具有属性和值以及CSS的

时间:2016-03-02 07:20:07

标签: html css xslt

最近更新我已经包含了一个示例XSL和当前输出:)

示例XML

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0"
  xmlns="http://www.w3.org/1999/xhtml" 
  exclude-result-prefixes="xsl">
  >
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
    <xsl:template match="/Report">
        <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
        </xsl:text>
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            <head>
                <title>My Report</title>
            </head>
            <body>
            <xsl:element name="table" namespace="">
                <xsl:element name="tr" namespace="">
                    <xsl:attribute name="id">123</xsl:attribute>
                    <xsl:element name="td" namespace="">
                        <xsl:attribute name="style">width: 15%;</xsl:attribute>
                        <xsl:element name="div" namespace="">
                            mememe
                        </xsl:element>
                    </xsl:element>

                    <xsl:element name="td" namespace="">
                        <xsl:element name="div" namespace="">
                            hi there
                        </xsl:element>
                    </xsl:element>

                    <xsl:element name="td" namespace="">
                        <xsl:attribute name="style">width: 3%; text-align:center; padding:0px;</xsl:attribute>
                        <xsl:element name="div" namespace="">
                            no chance
                        </xsl:element>
                    </xsl:element>
                </xsl:element>
            </xsl:element>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

当前输出

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>My Report</title>
    </head>
    <body>
        <table xmlns="">
            <tr id="123">
                <td style="width: 15%;">
                    <div>
                            mememe
                    </div>
                </td>
                <td>
                    <div>
                            hi there
                    </div>
                </td>
                <td style="width: 3%; text-align:center; padding:0px;">
                    <div>
                            no chance
                    </div>
                </td>
            </tr>
        </table>
    </body>
</html>

问题 xmlns =“”打破了严格的HTML验证以及所有后续的CSS。我怎么摆脱它?谢谢!

除非您想了解它是如何开始的,否则不要向下滚动

编辑我需要tr标签的属性id,因为我需要分配值,以便我可以将其用作锚点。

CODE

<xsl:template match="Details">
<xsl:element name="tr">
    <xsl:attribute name="id">
        <xsl:value-of select="following-sibling::PluginID"></xsl:value-of>
       <xsl:element name="td">Mall 3</xsl:element>
       <xsl:element name="td">00003</xsl:element>
        <td class="medium">
            <div>
                <a href="#top">
                    <xsl:apply-templates select="text()"/>
                </a>
            </div>
        </td>
        <td class="darkstyle" style="width: 3%; text-align:center; padding:0px;">
            <div>
                    <a href="#top">Top</a>
            </div>
        </td>
    </xsl:attribute>
</xsl:element>
</xsl:template>

问题

我无法使用xsl:element添加<td>,也无法使用html <td>标记。 那我该怎么做? TD有类和其他需要应用的样式inline,并且它们都应该有<div>,其中包含一些值。

除非有另一种方法将PluginID的值分配给<tr>

然后我如何将实际<div>和它的值添加到那里?

任何帮助或建议都将不胜感激!

编辑我得到了要应用的类,它会在没有错误的情况下进行转换但是CSS <style>标记没有被应用,只有该类的样式是!有什么想法吗?

<xsl:element name="tr">
    <xsl:attribute name="id">
        <xsl:value-of select="following-sibling::PluginID"></xsl:value-of>
    </xsl:attribute>
    <xsl:element name="td">
        <xsl:attribute name="class">
            medium
        </xsl:attribute>
        <xsl:attribute name="style">
            width: 15%;
        </xsl:attribute>
        <xsl:element name="div">
            <xsl:value-of select="following-sibling::RiskDesc"/>
        </xsl:element>
    </xsl:element>

    <xsl:element name="td">
        <xsl:attribute name="class">
            medium
        </xsl:attribute>
        <xsl:element name="div">
            <xsl:apply-templates select="text()"/>
        </xsl:element>
    </xsl:element>

    <xsl:element name="td">
        <xsl:attribute name="class">
            darkstyle
        </xsl:attribute>
        <xsl:attribute name="style">
            width: 3%; text-align:center; padding:0px;
        </xsl:attribute>
        <xsl:element name="div">
            Top
        </xsl:element>
    </xsl:element>
</xsl:element>

当前输出

<tr xmlns="" id="10026">
    <td class="&#10;&#9;&#9;&#9;&#9;&#9;medium&#10;&#9;&#9;&#9;&#9;" style="&#10;&#9;&#9;&#9;&#9;&#9;width: 15%;&#10;&#9;&#9;&#9;&#9;">
        <div>Medium</div>
    </td>
    <td class="&#10;&#9;&#9;&#9;&#9;&#9;medium&#10;&#9;&#9;&#9;&#9;">
        <div>Derp Derp</div>
    </td>
        <td class="&#10;&#9;&#9;&#9;&#9;&#9;darkstyle&#10;&#9;&#9;&#9;&#9;" style="&#10;&#9;&#9;&#9;&#9;&#9;width: 3%; text-align:center; padding:0px;&#10;&#9;&#9;&#9;&#9;">
        <div>
            Top
        </div>
    </td>
</tr>

编辑简化示例:

<xsl:element name="div">
    <xsl:attribute name="class">
        darkstyle
    </xsl:attribute>
    <!-- THE ISSUE IS THAT THIS STYLE ATTRIBUTE IS NOT BEING APPLIED! -->
    <xsl:attribute name="style">
        width: 3%; text-align:center; padding:0px;
    </xsl:attribute>
    <xsl:element name="div">
        Top
    </xsl:element>  
</xsl:element>

相关的CSS

.darkstyle{
    vertical-align: text-top;
    background:#666;
}

更新其中一个问题是我有标签被转换为转义字符使用

<xsl:attribute name="class">darkstyle</xsl:attribute>

ONE

,它将创建正确的html。

我设法跟踪<tr>标记的中断,上面的代码生成以下内容:

<tr xmlns="" id="10020">

正是这个xmls=""打破了我的所有CSS。 我该怎么办?仅供参考:我尝试将namespace=""添加到tr,但这并没有阻止它。

TOP OF XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  version="1.0"
  exclude-result-prefixes="yes"
  >
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
    <xsl:template match="/Report">
        <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
        </xsl:text>
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            <head>

1 个答案:

答案 0 :(得分:1)

您的处理器正在为所有行添加一个空的默认命名空间。如果 tr 元素应该被视为表行,这会导致浏览器感到困惑。

要解决此问题,您可以通过在样式表根目录上声明此默认命名空间,将所有非命名空间元素放入默认命名空间。

此外, exclude-result-prefixes 属性需要一个前缀列表,而不是yes / no值。这是您不希望附加到结果文档的名称空间前缀列表。在您的情况下,它是xsl。许多处理器会导致错误,其中包含无效值,但由于某种原因,您显然不是。

xsl:stylesheet元素上添加xmlns="http://www.w3.org/1999/xhtml",然后更改排除结果前缀,使其显示为

<xsl:stylesheet 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        version="1.0"
        xmlns="http://www.w3.org/1999/xhtml" 
        exclude-result-prefixes="xsl">

此外,避免在动态元素上指定具有namespace=""属性的空命名空间,除非它们明确需要空命名空间(即不是HTML元素)。