JavaScript 核心技术:XSLTProcessor 类型详解
Mozilla 引入了 XSLTProcessor 类型,在 JavaScript 中实现了对 XSLT 的支持。使用该类型,开发者可以像早期 IE 使用 XSL 处理器一样转换 XML 文档。随着该实现的普及,XSLTProcessor 已成为通过 JavaScript 完成 XSLT 转换的事实标准。
基础用法
与 IE 的实现类似,第一步是加载两个 DOM 文档:XML 文档和 XSLT 文档。接着,实例化一个新的 XSLTProcessor,并将样式表指定给它。
let processor = new XSLTProcessor();
processor.importStylesheet(xsltdom);
最后一步是执行转换,主要有两种方式:
- transformToDocument:返回完整的 DOM 文档。适用于需要独立处理结果的情况。
- transformToFragment:返回文档片段。通常用于将结果直接插入到另一个 DOM 文档中。
生成完整文档
调用 transformToDocument 时,只需传入 XML DOM,即可得到一个新的 DOM 对象。
let result = processor.transformToDocument(xmldom);
console.log(serializeXml(result));
生成文档片段
transformToFragment 接收两个参数:要转换的 XML DOM 和目标拥有该片段的文档。这确保了新片段可以在目标上下文中正确渲染。
let fragment = processor.transformToFragment(xmldom, document);
let div = document.getElementById("divResult");
div.appendChild(fragment);
这里,处理器创建了由 document 对象所有的片段,随后可将其添加到当前页面的元素中。
特殊输出格式处理
如果 XSLT 样式表的输出格式是 "xml" 或 "html",创建文档或片段很自然。但如果输出格式是 "text",通常意味着只想获取文本结果。
此时没有方法直接返回纯文本字符串。若调用 transformToDocument(),不同浏览器返回的内容可能不一致(例如 Safari 返回整个 HTML 文档,而 Firefox 仅返回包含一个元素的文档)。
解决方案是使用 transformToFragment() 获取包含结果文本的片段,再提取其子节点的值:
let fragment = processor.transformToFragment(xmldom, document);
text = fragment..;
.(text);

