有人建议我使用CSS来显示XML。我心里知道这是错的,但是找不到充分说服别人的话。任何人都可以向我提供使用CSS和XSLT显示XML的优缺点列表。
谢谢!
答案 0 :(得分:20)
你的心告诉你的是正确的。虽然可以将CSS用于XML,但XML本身没有任何语义。 CSS适用于Web,HTML和语义数据(好)外观。
XML比那更通用。 XSLT被发明用于将一种数据格式转换为另一种数据格式(仅XSLT 1.0,XML,XSLT 2.0,任何Unicode数据格式),即XML到HTML或XML到XSL-FO或其他XML或文本格式。 XSL-FO是为在纸张或屏幕上布置XML而发明的,比CSS更详细。
主要是缺点,尤其是考虑在浏览器中使用XML。如果你不想要我所有的bab呀学语,请跳到下面的整体建议; - )
缺点:它在很大程度上取决于上下文,但如果您想使用XML在互联网上显示,请再想一想:不要使用XML,而是将其转换为HTML。然后使用CSS + HTML显示您的数据。如果您在互联网上使用XML,但没有搜索引擎或抓取工具会理解<x>
和<y>
之间的区别,但他们会理解<h1>
和<h2>
之间的区别。
仅此一点就足以成为使用XSLT转换为HTML + CSS并自行避免使用XML的理由。
您可以使用的另一个非常重要的原因:XML + CSS意味着定义CSS中的每个元素。使用HTML + CSS意味着用户代理已经知道所有元素的默认布局属性。使用XML + XSLT通常意味着您创建HTML + CSS。您应该在服务器端执行此操作,因为客户端XSLT不是非常可靠并且仍然是跨浏览器兼容的。
(抱歉,我找不到专业人员)除非XML有语义(SVG,正如另一个用户所提到的),否则使用CSS进行布局是没有意义的。如果应该由用户代理在语义上理解布局,那么XML + CSS是不可行的。文本到语音的读者不知道该怎么做,WAI(可访问性)的有效性是不可能的等等。
使用XML使得很难做任何客户端脚本(是的,DOM是可用的,但是你如何告诉浏览器脚本标签是什么?但也许它会对<script>
作出反应,但是嘿,你需要XSLT来获取那个标签)并且很难使它跨浏览器正确(某些浏览器本身很难使用XML)。任何HTML(如元,标题,正文,脚本)都不可用。没有办法添加标题属性或告诉浏览器图像是什么(afaik)。
现有的脚本不会对你的XML页面起作用(prototype.js?jquery.js?ajax?no no and no)。
任何查看代码的人都必须了解每个标记“的含义”。使用XSLT转换为HTML,可以防止这种情况发生。这个额外的步骤是有益的,并且应该在从XML到浏览器显示时应用。
如果您的域名是SVG,SMIL,OD或其他任何内容,您可能已经知道:CSS是规范中不可或缺的一部分,应该使用。这与纯粹的,可能是非结构化的数据XML完全不同。
仅供比较:任何异步AJAX调用(应该)都返回XML。但任何使用它的库,都会将其解释为HTML,或者在将其注入现有页面之前使用XSLT或其他方法对其进行转换。
根据OP的评论,我们正在查看数据XML(不是SVG或OpenDocument),它需要在浏览器中显示。可访问性和可索引性并不重要。但这并不重要:你不应该单独使用XML + CSS,除非你真的喜欢冒险并希望在浏览器中发现XML的所有缺点,想要再次发明每个HTML标签并定义每个和一切,只是暂时放弃并恢复为HTML( XML + XSLT == HTML + CSS )。
更新: 添加了第2条
更新: 添加了cons 3和专业版1
更新: 添加了第4条,AJAX注释和结论
答案 1 :(得分:3)
CSS:
XSLT:
如果您的XML非常适合单个布局元素,那么使用CSS,如果您需要更多工作来调整它以进行显示,那么请使用XSLT。像任意重新排序内容或将多个值列表折叠到表格等中的事情本身并不适合CSS。如果文档的整体结构已经与您想要显示的结构相同,那么CSS实际上只能很好地工作。
答案 2 :(得分:1)
CSS在IE8中似乎失败了:How to apply CSS to namespace prefixed elements in IE8?
答案 3 :(得分:1)
使用CSS来设置XML样式并没有什么本质上的错误,它只是不常用(虽然我过去做过它作为一个实验)。
以SVG为例:它是XML,可以是styled with CSS。另外,请查看section 3.1, "Definitions", of CSS 2.1:
来源文件
一个或多个样式表适用的文档。这是以某种语言编码的,该语言将文档表示为元素树。每个元素由一个标识元素类型的名称,可选的多个属性和一个(可能是空的)内容组成。例如,源文档可以是XML 或SGML实例。
文档语言
源文档的编码语言(例如,HTML, XHTML或SVG )。 CSS用于描述文档语言的表示,CSS不会改变文档语言的基本语义。
(我的重点)。
在决定是否使用CSS而不是XSLT时要考虑的主要可能性让我感到:
将XML文档转换为不同的结构(例如XHTML)是否更有意义表示文档的语义?
文档的语义结构本身是否足够,只需要应用表示样式?
如果你有一些非常随意且没有意义的XML - 比如<data><column><row><value>1</value><value>foo</value></row></column></data>
,那么XSLT路由就有意义了。但是,如果你有一个文件有自己明确定义的语义(例如一个SVG文件,或任意数量的XML应用程序之一),你想要做的就是让标题脱颖而出,字体看起来不错,那么CSS很好
最终,尽可能做最简单的事情。 CSS - 至少从版本2开始 - 专门设计为与语言无关(即不依赖于HTML),因此没有充分的理由不在有意义的时候使用它。
答案 4 :(得分:0)
他们的意思是样式表吗?任何XML样式表都与CSS样式表不同。 XSL有时被称为样式表,所以你可能都是对的:)