Програми для обліку

Українське програмне забезпечення з відкритим кодом

Erlang

Дописи

Програмування / Erlang

26.04.2024 08:20 Erlang

Erlang та XSLT. Використання Xslt в Erlang

Erlang Logo

Приклад трансформації XSLT в Erlang

Приклад
Файл 1.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
    <item id="1">
        <code>001</code>
        <name>Node 1</name>
    </item>
    <item id="2">
        <code>002</code>
        <name>Node 2</name>
    </item>
</root>
Файл xml.erl
-module(xml).

-include_lib("xmerl/include/xmerl.hrl").

-import(xmerl_xs, 
	[xslapply/2, value_of/1, select/2, built_in_rules/2 ]).

-export([process_to_file/0]).

process_to_file() ->
    process_to_file('1.xml').

process_to_file(XMLDoc) ->
    {XMLContent,_} = xmerl_scan:file(XMLDoc, [{space, normalize}]),
    TransformedXML = template(XMLContent),
    io:format("~s", [TransformedXML]).

%%% templates
template(E = #xmlElement{name='root'}) ->
    #xmlObj{type=_, value=Val} = select("count(item)", E),
    ["count: ", io_lib:format("~p", [Val]), "\n",
        xslapply(fun template/1, select("item", E))];

template(E = #xmlElement{name='item'}) ->
    ["id: ", xslapply(fun template/1, select("@id", E)), 
     " code: ", value_of(select("code", E)), 
     " name: ", value_of(select("name", E)), "\n"];

template(E) -> 
    built_in_rules(fun template/1, E).
Запустити Erlang: erl
Скомпілювати скріпт: c("xml.erl"). або c(xml).
Запустити виконання функції: xml:process_to_file().


Порівняння шаблонів Xslt та функцій у Erlang
value_of(E) -> List
Xslt
<xsl:template match="title">
	<div align="center">
		<h1><xsl:value-of select="." /></h1>
	</div>
</xsl:template>
Erlang
 template(E = #xmlElement{name='title'}) ->
     ["<div align="center"><h1>", value_of(select(".", E)), "</h1></div>"]

xslapply(Fun::Function, EList::list()) -> List
Xslt
<xsl:template match="doc/title">
	<h1>
		<xsl:apply-templates/>
	</h1>
</xsl:template>
Erlang
 template(E = #xmlElement{ parents=[{'doc',_}|_], name='title'}) ->
    ["<h1>", xslapply(fun template/1, E), "</h1>"];

Документація Erlang


© accounting.org.ua - 2024