我正在将我的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>
Here是指向页面的链接,输出为XML,here是输出为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);
?>
答案 0 :(得分:1)
简答
您无法将XML输出到浏览器并期望他呈现HTML,它们是不同的语言。
长答案
如果输出XML而不是HTML,则浏览器不会按预期呈现页面,因为创建XML节点而不是HTML节点。这两者之间的区别在于HTML节点比XML节点具有更多属性。例如。其中一些属性允许我们设置HTML元素的样式。
XML节点的属性允许我们操作和导航DOM,而HTML属性是所有XML属性的超集(我认为)。
有关可用于每种节点的属性列表(从Firefox的角度来看,这非常符合标准):https://developer.mozilla.org/en-US/docs/DOM/element
<强> XHTML 强>
因为您指的是验证,HTML 4.01的替代品是XHTML 1.0,它是一种与HTML或XML不同的语言,并且在验证方面更严格(例如,它不允许不匹配的标签)。
要表明您使用XHTML 1.0而不是HTML 4.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,也存在一些(次要的)差异。我留下一篇列出这些差异的文章: