2016-03-02 135 views
0

最近的更新我已经包括一个样品XSL和电流输出:)XSL TR和TD元素

示例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> 

ASSOCIATED CSS

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

UPDATE的一个问题是,我有这正在变成转义字符选项卡上ONE线使用

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

,它会创建适当的HTML。

我设法跟踪突破至<tr>标签,上面的代码,生成以下内容:

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

正是这种xmls="",打破我所有的CSS的。 我能做些什么?仅供参考:我尝试将namespace=""添加到tr,但这并不妨碍它。

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> 
+0

你为什么试图在属性内的下几个元素? –

+0

@Jim Garrison我需要为'tr'指定一个id值,并且我需要创建具有应用样式的'td's'。我不明白你的问题。你能解释一下你的意思吗? – codeCompiler77

+0

也许您可以向我们提供我们可以用来重现错误的输入 –

回答

1

你的处理器添加一个空的默认命名空间到所有行的顶部。这会导致您的浏览器对于是否应该将表格视为表格行来处理混淆。

要解决此问题,可以通过在样式表根目录中声明此默认名称空间,将所有非名称空间元素置于默认名称空间中。

此外,排除结果前缀属性需要前缀列表,而不是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"> 

此外,避免specifiing一个空的命名空间与动力的namespace=""属性元素,除非它们明确需要一个空的名称空间(即不是HTML元素)。

+0

感谢您的回复,请参阅上面的更新。这并没有删除xmlns =“”标记:( – codeCompiler77

+0

@ codeCompiler77删除所有的'namespace =“”'属性,这些都覆盖了默认的命名空间,并且是你的问题的根源 – Matthew

+0

**先生!你是一个绅士和学者,我很感谢你:) **如果没有太多的麻烦,你介意解释为什么xsl排除工作吗?具体是什么XSL排除。我尝试过xhtml,然后我尝试了yes/no,这是我在接受的一个stackoverflow中看到的答案:( – codeCompiler77