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>"];