2016-03-02 67 views
1

XSL样品XSL为XHTML严格DOCTYPE - META标签验证问题

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    > 
    <xsl:output method="html"/> 
    <xsl:template match="/Report"> 
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
      <head> 

问题:我需要定义文档类型

<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"DTD/xhtml1-strict.dtd"> 
在XSL

,但它不是让我把它放在那里,说无效的样式表。

我想:

<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;DTD/xhtml1-strict.dtd&quot;&gt;</xsl:text> 

,但它这样做的正确方法?在线验证器甚至不会看到HTML呈现的行应该是有效的。

  1. 什么是添加DOCTYPE的正确方法?
  2. 我的xmlns:xsl="http://www.w3.org/1999/XSL/Transform"仍然应该在那里变换吗?

我有一个XSL样式表的XML数据文件,我转换成html。我想添加上面的内容,使其符合XHTML严格标准。任何意见,将不胜感激。谢谢!

期望输出

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html 
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
     <title> Strict DTD XHTML Example </title> 
    </head> 
    <body> 
     <p> 
Please Choose a Day: 
      <br /> 
      <br /> 
      <select name="day"> 
       <option selected="selected">Monday</option> 
       <option>Tuesday</option> 
       <option>Wednesday</option> 
      </select> 
     </p> 
    </body> 
</html> 

产生的XHTML

<!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> 
     <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>OWASP ZAP Vulnerability Report</title> 
    </head> 
    <body> 
    </body> 
</html> 

问题使用:https://validator.w3.org/

  • 的我ssue似乎是由head元素中的META标签引起的,但我不明白为什么。

那么,如何阻止我的XSL添加META标记?

SOLUTION

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    > 
    <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> 

更改xsl:output method从HTML到XML。但回到另一个问题,有没有更好的方法来申报DOCTYPE

回答

2

使用xsl:output,https://www.w3.org/TR/xslt#output的属性,即doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",则序列化的XSLT处理器添加DOCTYPE