我在星际争霸2的网站上结束了,并决定看看他们的来源并看到了这个:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="layout/artwork.xsl"?>
<page lang="en_us">
<artwork/>
</page>
......就是这样。所以我想知道,如果你只使用2个标签,那么使用XSLT有什么意义呢?它是否混淆了源?
编辑:我只想澄清一点,我不是在问XSLT是如何工作的。我想问一下以这种方式设置页面有什么好处。在我看来,似乎很难使用XSLT。
答案 0 :(得分:3)
[编辑]在源xml中提供完整信息与在样式表中提供它将是一个主观问题,这取决于系统的设计者。我们可以假设,在这种情况下,那个微小的xml表示与此页面有关的信息,其余的脚手架都在进口/包含中。或者两个不同的团队正在处理页面布局内容和实际的页面层次结构,让布局设计师在不更改xmls的情况下更改内容,但您的猜测与我的一样好。通常,这将基于XML是否将在其他任何地方使用,或者在可能重用XML的任何地方需要布局信息来设计。如果在其他地方不需要布局信息,请将其删除并将其包含在XSLT中,留下可在多个位置重复使用的更清晰的XML。
这是按预期工作的。发生的事情是该站点正在对XML文件执行XSLT转换,该转换是通过第二行中的处理指令。
<?xml-stylesheet type="text/xsl"
href="layout/artwork.xsl"?>
在客户端支持XSLT呈现的浏览器将获取处理指令中指定的XSLT文件并执行XSLT转换并显示输出。由于这是在运行时,当您“查看源”时,不会显示实际结果标记,但仅显示原始源。
如果加载layout / artwork.xsl文件,您会发现在浏览器中呈现页面所需的代码。 http://starcraft2.com/layout/artwork.xsl此外,artwork.xsl再次导入另一个名为includes.xsl的样式表 - http://starcraft2.com/layout/includes.xsl - 其中还包含生成将要显示的内容的代码。 XSLT的知识或意识将有助于确定这些样式表的输出以及它的工作原理。
从我看到的,样式表似乎也导入外部XML文档,以用作生成输出的输入数据。这是对作为XSLT的“源”文档提供的内容的补充。在这种情况下,源非常小,大部分信息都是在XSLT中导入的。
希望我有道理。
谢谢,蒂亚格
答案 1 :(得分:2)
他们使用它的方式不一定是坏/错,只是与你以前看到的不同。
在这种情况下,没有太多的XML内容可以转换,但是文档的结构和存在的一点点XML 确实会影响XSLT生成的内容 。
<page>
元素
XML文件与XSLT模板匹配
使用样板HTML内容@lang
XSLT模板匹配指示
哪种语言具体内容
渲染。 <artwork/>
元素
XML文件用于触发
XSLT中的“艺术品”模板
包含“艺术品”特定的HTML
内容(包括“艺术作品”
特定的JavaScript)。 那个内容
本来可以包含在XML中
文件和模板可以有
也被复制到结果文档中。 他们刚刚决定将所有内容放在XSLT(和JavaScript)中。内容“存在”的位置无关紧要,源XML和XSLT都是XML文档,用于生成结果文档。
生成的HTML页面中还包含许多JavaScript文件,其中一些来自该图稿模板。我没有花时间看看它是如何工作的,但我怀疑页面的很多HTML内容也是从那些JavaScript文件生成的。
您可以问一个类似的问题,为什么有人会选择将HTML页面的HTML内容放在JavaScript中,而不是放在包含带元素的JavaScript的源HTML文件中。 < / p>
答案 2 :(得分:1)
有一点需要注意的是,每个页面元素都有一个lang属性,该属性是根据浏览器提供的Accept-Language http标头修改的。 XSLT使用此属性来选择本地化资源。模板的组织方式使得许多常见的页面元素(如标题和flash对象)在常见的“includes.xsl”文件中定义。
由于所有本地化和html呈现都是由客户端完成的,因此这可能会节省大量的服务器CPU时间。此外,鉴于在全局“包含”文件中定义了许多元素,可以通过浏览器请求一次并缓存,从而节省带宽并减少下载每个页面的总时间。
答案 3 :(得分:-1)
您获得源的特定页面可能已由内容管理系统生成。
某些内容管理系统将所有内容发布为XML,然后由Web服务器应用的样式表生成HTML。
Web浏览器负责应用样式表并不常见,尽管这似乎是在这种情况下发生的事情。