首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

4.3.3  Firefox中的XSLT

XMLXPath一样,FirefoxXSLT实现与IE中的实现存在许多不同之处。Firefox实现一个XSLTProcessor类来执行转换,不过相似之处也就仅此而已。

Firefox中执行转换的第一步是将XMLXSLT文档载入到DOM对象中:

var oXmlDom = zXmlDom.createDocument();

var oXslDom = zXmlDom.createDocument();

 

oXmlDom.async = false;

oXslDom.async = false;

 

oXmlDom.load("books.xml");

oXslDom.load("books.xsl");

XSLTProcessor类公开了importStylesheet()方法,该方法的参数为包含XSLT文档的XML DOM对象:

var oXsltProcessor = new XSLTProcessor();

oXsltProcessor.importStylesheet(oXslDom);

最后调用转换方法。这里有两类方法:transformToDocument()transformToFragment()transformToDocument()方法的参数为XML DOM对象,并返回包含转换的新XML DOM文档。通常情况下,将以下述的形式来使用它:

var oNewDom = oXsltProcessor.transformToDocument(oXmlDom);

作为结果返回的DOM对象与其他XML DOM对象的用法类似。可以根据XPath选择特定节点,基于属性和方法遍历节点结构,甚至在另一个转换中使用它。

transformToFragment()方法返回一个文档片段,恰如其名,附加到另一个DOM文档上。该方法需要两个参数:第一个参数是要转换的XML DOM对象,第二个参数是计划附加结果的DOM文档:

var oFragment = oXsltProcessor.transformToFragment(oXmlDom, document);

document.body.appendChild(oFragment);

在示例中,返回结果的文档片段附加到文档对象的主体中。请注意,结果片段可以附加到作为参数传入transformToFragment()方法的DOM对象内的任意节点。

但是如果想像微软的transformNode()方法实现一样,返回的字符串作为转换结果,该怎么样呢?那么可以使用之前介绍的XMLSerializer类。只需要将转换结果作为参数传到serializeToString()方法中:

var oSerializer = new XMLSerializer();

var str = oSerializer.serializeToString(oNewDom);

如果使用zXml库,则只需简单使用xml属性即可:

var str = oFragment.xml;

XSLTProcessor类还可以设置传入XSL样式表的参数。setParameter()方法可以很容易地完成该功能。该方法接受三个参数:命名空间URI、参数名称以及参数值。例如:

oXsltProcessor.importStylesheet(oXslDom);

 

oXsltProcessor.setParameter(null, "message", "My Book List");

 

var oNewDom = oXsltProcessor.transformToDocument(oXmlDom);

在该示例中,赋给参数message的值为"My Book List"。第一个参数命名空间URI传入的值为null,那么样式表中的参数就不需要指定前缀和相应的命名空间URI

<xsl:param name="message" />

setParameter()方法必须在调用transformToDocument()transformToFragment()前调用,否则转换中就不能使用所设置的参数值。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论