如何在XSLT中正确使用XML输出?

如何在XSLT中正确使用XML输出?,xml,xslt,Xml,Xslt,我将XSLT输出为HTML,但我已经了解到,出于验证原因,输出为XML更好。因此,当我将输出从HTML更改为XML时,会破坏页面,这是否意味着我现在需要从XSLT文件中删除所有HTML元素?我还通过外部CSS文件进行样式设置,当输出为XML时,样式设置是否需要在XSLT文件中 以下是我的页面代码: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/

我将XSLT输出为HTML,但我已经了解到,出于验证原因,输出为XML更好。因此,当我将输出从HTML更改为XML时,会破坏页面,这是否意味着我现在需要从XSLT文件中删除所有HTML元素?我还通过外部CSS文件进行样式设置,当输出为XML时,样式设置是否需要在XSLT文件中

以下是我的页面代码:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output 
method="xml" 
doctype-system="http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"  
doctype-public="-//WAPFORUM//DTD XHTML Mobile 1.2//EN" />

<xsl:template match="/">


        <xsl:element name="head">
            <xsl:element name="title">Selected Flight Route</xsl:element>
            <link rel="stylesheet" type="text/css" href="mystyles.css" title="Style"/>
        </xsl:element>

        <xsl:element name="body"> 

            <xsl:element name="div"><!-- This holds the navigation bar-->
                <xsl:attribute name="id">
                    <xsl:text>navdiv</xsl:text>
                </xsl:attribute>


                <xsl:element name="div"><!-- This holds the image links-->
                    <xsl:attribute name="id">
                        <xsl:text>navlinks</xsl:text>
                    </xsl:attribute>

                    <xsl:element name="a">
                        <xsl:attribute name="id">
                            <xsl:text>navlinksone</xsl:text>
                        </xsl:attribute>
                        <xsl:attribute name="href">flights.php</xsl:attribute>
                    </xsl:element>

                    <xsl:element name="a">
                        <xsl:attribute name="id">
                            <xsl:text>navlinkstwo</xsl:text>
                        </xsl:attribute>
                        <xsl:attribute name="href">planes.php</xsl:attribute>
                    </xsl:element>

                    <xsl:element name="a">
                        <xsl:attribute name="id">
                            <xsl:text>navlinksthree</xsl:text>
                        </xsl:attribute>
                        <xsl:attribute name="href">weatherfeed.php</xsl:attribute>
                    </xsl:element>

                </xsl:element>
            </xsl:element><!-- End the navigation bar-->






<xsl:element name="div"><xsl:attribute name="id">
                            <xsl:text>maindiv</xsl:text>
                        </xsl:attribute>



<h1 id="heading">Flights and planes</h1>

<xsl:element name="div"><xsl:attribute name="id">
                            <xsl:text>divone</xsl:text>
                        </xsl:attribute><img width="30" height="30" src="globe.png"/><p class="centerp">Selecting the Globe will display all flight routes.</p></xsl:element>

<xsl:element name="div"><xsl:attribute name="id">
                            <xsl:text>divtwo</xsl:text>
                        </xsl:attribute><img width="75" height="30" src="planepic.png"/><p class="centerp">Selecting the Plane will display all Aircraft info.</p></xsl:element>

<xsl:element name="div"><xsl:attribute name="id">
                            <xsl:text>divthree</xsl:text>
                        </xsl:attribute><img width="32" height="30" src="weather.png"/><p class="centerp">The Weather icon displays the weather in all citys.</p></xsl:element>
</xsl:element>







        </xsl:element>
        <!-- End the Body element -->



</xsl:template>
<!-- End the Main Template element -->

</xsl:stylesheet>

选定航线
导航师
导航链接
导航索
flights.php
navlinkstwo
planes.php
导航链接三
weatherfeed.php
maindiv
航班和飞机
女主角

选择地球仪将显示所有航线

第二组 选择飞机将显示所有飞机信息

第三名 天气图标显示所有城市的天气

是一个指向输出为XML的页面的链接,也是一个输出为HTML的页面,有人能告诉我为什么输出为XML时会弄乱我的页面吗?在研究问题所在时,我注意到以XML形式输出的示例文件中似乎没有任何HTML元素

以下是我用来转换XML的原始文件:

<?php
$xml = new DOMDocument();   
$xml->load('flights.xml');

$xsl = new DOMDocument;
$xsl->load('index.xsl');

$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);

echo $proc->transformToXML($xml);
?>

简短回答

您不能将XML输出到浏览器并期望他呈现HTML,因为它们是不同的语言

长答案

如果输出的是XML而不是HTML,则浏览器将无法按预期呈现页面,因为它正在创建XML节点而不是HTML节点。这两者之间的区别在于HTML节点比XML节点具有更多的属性。例如,其中一些属性允许我们为HTML元素设置样式

XML节点的属性允许我们操作和导航DOM,而HTML属性是所有XML属性的超集(我认为)

对于每种节点可用的属性列表(从Firefox的角度来看,Firefox非常符合标准):

XHTML

因为您指的是验证,所以HTML 4.01的另一个替代方案是XHTML 1.0,它与HTML或XML不同,在验证方面更严格(例如,它不允许不匹配的标记)

要指示浏览器使用的是XHTML1.0而不是HTML4.01,必须在文档顶部包含其中一个DOCTYPE元素

 <!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

CSS差异

对于XHTML文档如何处理CSS,也存在一些(微小的)差异。我给您留下一篇文章,列出这些差异:


简短回答

您不能将XML输出到浏览器并期望他呈现HTML,因为它们是不同的语言

长答案

如果输出的是XML而不是HTML,则浏览器将无法按预期呈现页面,因为它正在创建XML节点而不是HTML节点。这两者之间的区别在于HTML节点比XML节点具有更多的属性。例如,其中一些属性允许我们为HTML元素设置样式

XML节点的属性允许我们操作和导航DOM,而HTML属性是所有XML属性的超集(我认为)

对于每种节点可用的属性列表(从Firefox的角度来看,Firefox非常符合标准):

XHTML

因为您指的是验证,所以HTML 4.01的另一个替代方案是XHTML 1.0,它与HTML或XML不同,在验证方面更严格(例如,它不允许不匹配的标记)

要指示浏览器使用的是XHTML1.0而不是HTML4.01,必须在文档顶部包含其中一个DOCTYPE元素

 <!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

CSS差异

对于XHTML文档如何处理CSS,也存在一些(微小的)差异。我给您留下一篇文章,列出这些差异:


谢谢,我一直在研究这个问题,我刚刚发现是Doctype导致了这个问题,因为我正在开发一个移动站点,当我使用移动Doctype时,它会把页面搞砸。您知道如何在XSLT中使用移动XHTML Doctype吗?非常感谢。我试图在这个页面上使用其中的一个,我从来没有使用过XHTML mobile,我对它不太了解,但是你可以阅读这篇文章的第二部分/这本书的片段:在这里,他们只使用外部DTD。希望它能帮上忙谢谢你的帮助,我已经试过了各种类型的移动DTD,但都没用。当我使用XHTML严格的DTD时,我的页面加载良好,所有内容都有效,但当我使用移动DTD时,它会把事情搞砸,我不知道为什么。关于移动DTD和XSLT的信息似乎不多!我要继续读下去!谢谢你,我一直在研究这个问题,我刚刚发现是Doctype导致了这个问题,因为我正在开发一个移动站点,当我使用mobi时