Transforming a Dynarex document to HTML using the DxSliml gem

require 'dx_sliml'


s = <<EOF
dl
  dt from:
  dd $from

  dt to:
  dd $to

  dt subject:
  dd $subject
EOF

s2 =<<EOF
<?dynarex schema='email[title]/messages(from, to, subject)' delimiter='#'?>
title: Email for James
-----------------------

abc@ruby132.org     # james@jamesrobertson.eu # test 123
info@gtdtoday.co.uk # james@jamesrobertson.eu # How to plan ahead (newsletter)
a123456@aol.com     # info@jamesrobertson.eu  # hello

EOF


d = DxSliml.new s, Dynarex.new.import(s2)
puts d.to_xslt
puts d.to_html


XSLT output:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
  <xsl:output method='xml' indent='yes' omit-xml-declaration='yes'/>
  <xsl:template match='email'>
    <html>
      <head>
        <title>Email for James</title>
      </head>
      <body>
        <header>
          <xsl:apply-templates select='summary'/>
        </header>
        <main>
          <xsl:apply-templates select='records/messages'/>
        </main>
      </body>
    </html>
  </xsl:template>
  <xsl:template match='email/summary'>
    <dl>
      <xsl:for-each select='*'>
        <dt>
          <xsl:value-of select='name()'/>
        </dt>
        <dd>
          <xsl:value-of select='.'/>
        </dd>
      </xsl:for-each>
    </dl>
  </xsl:template>
  <xsl:template match='records/messages'>
    <dl>
  <dt>from:</dt>
  <dd><xsl:value-of select="from"/></dd>
  <dt>to:</dt>
  <dd><xsl:value-of select="to"/></dd>
  <dt>subject:</dt>
  <dd><xsl:value-of select="subject"/></dd>
</dl>
  </xsl:template>
</xsl:stylesheet>

HTML output:

<?xml version="1.0"?>
<html>
  <head>
    <title>Email for James</title>
  </head>
  <body>
    <header>
      <dl>
        <dt>title</dt>
        <dd>Email for James</dd>
        <dt>recordx_type</dt>
        <dd>dynarex</dd>
        <dt>format_mask</dt>
        <dd>[!from]#[!to]#[!subject]</dd>
        <dt>schema</dt>
        <dd>email[title]/messages(from, to, subject)</dd>
        <dt>default_key</dt>
        <dd>from</dd>
        <dt>delimiter</dt>
        <dd>#</dd>
      </dl>
    </header>
    <main>
      <dl>
        <dt>from:</dt>
        <dd>abc@ruby132.org</dd>
        <dt>to:</dt>
        <dd>james@jamesrobertson.eu</dd>
        <dt>subject:</dt>
        <dd>test 123</dd>
      </dl>
      <dl>
        <dt>from:</dt>
        <dd>info@gtdtoday.co.uk</dd>
        <dt>to:</dt>
        <dd>james@jamesrobertson.eu</dd>
        <dt>subject:</dt>
        <dd>How to plan ahead (newsletter)</dd>
      </dl>
      <dl>
        <dt>from:</dt>
        <dd>a123456@aol.com</dd>
        <dt>to:</dt>
        <dd>info@jamesrobertson.eu</dd>
        <dt>subject:</dt>
        <dd>hello</dd>
      </dl>
    </main>
  </body>
</html>

Resources