2016-03-02 66 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