Skip to content

Instantly share code, notes, and snippets.

@bever1337
Last active May 13, 2023 07:54
Show Gist options
  • Save bever1337/8914eed79d98997f2b2fdbc0ab73cf3e to your computer and use it in GitHub Desktop.
Save bever1337/8914eed79d98997f2b2fdbc0ab73cf3e to your computer and use it in GitHub Desktop.
Convert IRE XML Maps to JSON using XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" />
<xsl:template match="/">
<xsl:text>{"areas":[</xsl:text>
<xsl:for-each select="/map/areas/area">
<xsl:text>{"id":"</xsl:text>
<xsl:value-of select="@id" />
<xsl:text>","name":"</xsl:text>
<xsl:value-of select="@name" />
<xsl:text>"}</xsl:text>
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:text>],"environments":[</xsl:text>
<xsl:for-each select="/map/environments/environment">
<xsl:text>{"color":"</xsl:text>
<xsl:value-of select="@color" />
<xsl:text>","htmlcolor":"</xsl:text>
<xsl:value-of select="@htmlcolor" />
<xsl:text>","id":"</xsl:text>
<xsl:value-of select="@id" />
<xsl:text>","name":"</xsl:text>
<xsl:value-of select="@name" />
<xsl:text>"}</xsl:text>
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:text>],"rooms":[</xsl:text>
<xsl:for-each select="/map/rooms/room">
<xsl:text>{"area":"</xsl:text>
<xsl:value-of select="@area" />
<xsl:text>","environment":"</xsl:text>
<xsl:value-of select="@environment" />
<xsl:text>","id":"</xsl:text>
<xsl:value-of select="@id" />
<xsl:text>","title":"</xsl:text>
<xsl:value-of select="@title" />
<xsl:text>","x":</xsl:text>
<xsl:value-of select="./coord/@x" />
<xsl:text>,"y":</xsl:text>
<xsl:value-of select="./coord/@y" />
<xsl:text>,"z":</xsl:text>
<xsl:value-of select="./coord/@z" />
<xsl:text>,"exits":[</xsl:text>
<xsl:for-each select="./exit">
<xsl:text>{"direction":"</xsl:text>
<xsl:value-of select="@direction" />
<xsl:text>","door":</xsl:text>
<xsl:choose>
<xsl:when test="@door">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>,"hidden":</xsl:text>
<xsl:choose>
<xsl:when test="@hidden">
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>,"targetArea":"</xsl:text>
<xsl:choose>
<xsl:when test="@tgarea">
<xsl:value-of select="@tgarea" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="../@area" />
</xsl:otherwise>
</xsl:choose>
<xsl:text>","targetRoom":"</xsl:text>
<xsl:value-of select="@target" />
<xsl:text>"}</xsl:text>
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:text>]}</xsl:text>
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:text>]}</xsl:text>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment