最近更新我已经包含了一个示例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'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
</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=" 					medium 				" style=" 					width: 15%; 				">
<div>Medium</div>
</td>
<td class=" 					medium 				">
<div>Derp Derp</div>
</td>
<td class=" 					darkstyle 				" style=" 					width: 3%; text-align:center; padding:0px; 				">
<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>
,它将创建正确的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'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
</xsl:text>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
答案 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元素)。