XSL到XHTML严格使用DOCTYPE - META标记验证问题

时间:2016-03-02 04:13:00

标签: html xslt xhtml

XSL示例

<?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>

问题:我需要定义DOC TYPE

<!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"是否还会在那里转换?
  3. 我有一个带有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/

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

    那么如何阻止我的XSL添加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="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

1 个答案:

答案 0 :(得分:2)

使用xsl:outputhttps://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