xmerl_xs

xmerl_xs

模块

xmerl_xs

模块摘要

Erlang与XSLT有相似之处,因为这两种语言都有函数式编程方法。

描述

Erlang与XSLT有相似之处,因为这两种语言都有函数式编程方法。使用xmerl_xpath可以在Erlang中编写类似于XSLT的转换。

XSLT样式表通常用于将XML文档转换为其他XML文档或用于演示的(X)HTML。XSLT包含相当多的功能,学习它们都需要付出一些努力。本文档假定您对XSLT有基本的了解。

由于XSLT基于带有模式匹配和递归的函数式编程方法,因此可以在Erlang中编写类似的样式表。至少对于基本的转换。本文档描述了如何使用XPath实现、Erlangs模式匹配和一些函数来编写XSLT(如转换)。

对于一个Erlanger来说,这种方法可能更容易,但如果您需要使用真正的XSLT样式表以符合标准,那么Sablotron XSLT包就有一个适配器,它是用i C ++编写的。另见Tutorial

出口

built_in_rules(Fun, E) -> List

默认的退步行为。模板功能应该以以下内容结尾:

template(E) -> built_in_rules(fun template/1, E)...

select(String::string(), E) -> E

根据XPath从XML树中提取节点。

另见: value_of/1

value_of(E) -> List

类型

连接树中的所有文本节点。

例子:

<xsl:template match="title"> <div align="center"> <h1><xsl:value-of select="." /></h1> </div> </xsl:template>

变成:

template(E = #xmlElement{name='title'}) -> ["<div align="center"><h1>", value_of(select(".", E)), "</h1></div>"]

xslapply(Fun::Function, EList::list()) -> List

类型

xslApplication是一个包装器,用于使事情看起来类似于xsl:Apply-模板。

例如,原始XSLT:

<xsl:template match="doc/title"> <h1> <xsl:apply-templates/> </h1> </xsl:template>

变成了二郎:

template(E = #xmlElement{ parents=[{'doc',_}|_], name='title'}) -> ["<h1>", xslapply(fun template/1, E), "</h1>"];