On Thu, Sep 2, 2010 at 10:49 AM, Ricky <kf6...@gmail.com> wrote:

> Could even be
> potentially possible with LLSD since it is based in xml, but may be
> more difficult to make a good XSL document due to the fact that LLSD
> is not context-free. (The descriptor and content are sibling nodes.
> This caused me much headache many months ago!)
>

You can use XPaths like key[text()='KEYNAMEHERE']/following-sibling::* to do
key/value processing over XML-serialized LLSD in XSLT.

For example, given this XML-serialized LLSD:

<?xml version="1.0" encoding="utf-8"?>
<llsd>
  <array>
    <map>
      <key>speaker</key>
      <string>Joshua Linden</string>
      <key>text</key>
      <string>Hello, world</string>
      <key>timestamp</key>
      <date>2010-09-02T12:11:44Z</date>
    </map>
    <map>
      <key>speaker</key>
      <string>Joshua Linden</string>
      <key>text</key>
      <string>It's lonely here</string>
      <key>timestamp</key>
      <date>2010-09-02T12:12:32Z</date>
    </map>
  </array>
</llsd>

You can process it with this XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
<xsl:output method="html" />

<xsl:template match="/llsd/array">
  <html>
    <title>Chat Log</title>
    <table>
      <xsl:for-each select="map">
        <xsl:call-template name="entry" />
      </xsl:for-each>
    </table>
  </html>
</xsl:template>

<xsl:template name="entry">
  <tr>
    <td>
       <xsl:value-of select="key[text()='timestamp']/following-sibling::*"
/>
    </td>
    <td>
       <xsl:value-of select="key[text()='speaker']/following-sibling::*" />
    </td>
    <td>
       <xsl:value-of select="key[text()='text']/following-sibling::*" />
    </td>
  </tr>
</xsl:template>

</xsl:stylesheet>

To get this HTML output:

<html>
<title>Chat Log</title>
<table>
<tr>
<td>2010-09-02T12:11:44Z</td>
<td>Joshua Linden</td>
<td>Hello, world</td>
</tr>
<tr>
<td>2010-09-02T12:12:32Z</td>
<td>Joshua Linden</td>
<td>It's lonely here</td>
</tr>
</table>
</html>
_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/OpenSource-Dev
Please read the policies before posting to keep unmoderated posting privileges

Reply via email to