aboutsummaryrefslogtreecommitdiffstats
path: root/lib/xmerl/doc/examples/xserl_test.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/xmerl/doc/examples/xserl_test.erl')
-rw-r--r--lib/xmerl/doc/examples/xserl_test.erl85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/xmerl/doc/examples/xserl_test.erl b/lib/xmerl/doc/examples/xserl_test.erl
new file mode 100644
index 0000000000..69db75cfe8
--- /dev/null
+++ b/lib/xmerl/doc/examples/xserl_test.erl
@@ -0,0 +1,85 @@
+-module(xserl_test).
+-include("xmerl.hrl").
+-import(xserl,[ xslapply/2, value_of/1, select/2, built_in_rules/2 ]).
+-export([process_xml/1,test/0]).
+
+doctype()->
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\
+ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd \">".
+
+test() ->
+ Str= "<?xml version=\"1.0\"?>"
+ "<doc xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>"
+ "<title>Cheaper by the Dozen</title>"
+ "<isbn:number>1568491379</isbn:number>"
+ "<note>"
+ "<!-- make HTML the default namespace for some commentary -->"
+ "<p xmlns='urn:w3-org-ns:HTML'>"
+ "This is a <i>funny</i> book!"
+ "</p>"
+ "</note>"
+ "</doc>",
+ {Doc,_}=xmerl_scan:string(Str,[{fetch_fun, fun(DTDSpec,S) -> {ok,S} end}]),
+
+ process_xml(Doc).
+
+process_xml(Doc)->
+ template(Doc).
+
+template(E = #xmlElement{name='doc'})->
+ [ "<\?xml version=\"1.0\" encoding=\"iso-8859-1\"\?>",
+ doctype(),
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\" >"
+ "<head>"
+ "<title>", xserl:value_of(select("title",E)), "</title>"
+ "</head>"
+ "<body>",
+ xslapply( fun template/1, E),
+ "</body>"
+ "</html>" ];
+
+
+template(E = #xmlElement{ parents=[{'doc',_}|_], name='title'}) ->
+ ["<h1>",
+%% xslapply( fun template/1, E),
+%% same as
+ lists:map( fun template/1, E#xmlElement.content ),
+ "</h1>"];
+
+template(E = #xmlElement{ parents=[{'chapter',_}|_], name='title'}) ->
+ ["<h2>",
+ xslapply( fun template/1, E),
+ "</h2>"];
+
+template(E = #xmlElement{ parents=[{'section',_}|_], name='title'}) ->
+ ["<h3>",
+ xslapply( fun template/1, E),
+ "</h3>"];
+
+template(E = #xmlElement{ name='para'}) ->
+ ["<p>",
+ xslapply( fun template/1, E),
+ "</p>"];
+
+template(E = #xmlElement{ name='note'}) ->
+ ["<p class=\"note\">"
+ "<b>NOTE: </b>",
+ xslapply( fun template/1, E),
+ "</p>"];
+
+template(E = #xmlElement{ name='emph'}) ->
+ ["<em>",
+ xslapply( fun template/1, E),
+ "</em>"];
+
+template(E)->
+ built_in_rules( fun template/1, E).
+
+%% It is important to end with a call to xserl:built_in_rules/2
+%% if you want any text to be written in "push" transforms.
+%% That are the ones using a lot xslapply( fun template/1, E )
+%% instead of value_of(select("xpath",E)), which is pull...
+%% Could maybe be caught as an exception in xslapply instead,
+%% but I think that could degrade performance - having an
+%% exception for every #xmlText element.
+