Skip to content

Instantly share code, notes, and snippets.

@mouseos
Created September 21, 2024 14:06
Show Gist options
  • Save mouseos/4e9368f6110c57d9b31828fca75b7c69 to your computer and use it in GitHub Desktop.
Save mouseos/4e9368f6110c57d9b31828fca75b7c69 to your computer and use it in GitHub Desktop.
icecast2のjsonバグを修正
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="xml2json.xslt"/>
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="application/json"/>
<xsl:strip-space elements="*"/>
<!-- override imported transform variable to enable output -->
<xsl:variable name="output">true</xsl:variable>
<!-- hide certain nodes from all sources -->
<xsl:template match="icestats/source/max_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/public"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/source_ip"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/slow_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/*[contains(name(), 'total_bytes')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/user_agent"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<!-- hide certain global nodes -->
<xsl:template match="icestats/sources"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/clients"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/stats"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="node()[contains(name(), 'connections')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<!-- handle title field correctly -->
<xsl:template match="icestats/source/title">
<xsl:choose>
<xsl:when test="normalize-space(.) = ''">"title":null</xsl:when>
<xsl:otherwise>"title":"<xsl:value-of select="normalize-space(.)"/>",</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- handle other fields similarly if needed -->
<!-- Add more specific field handling as required -->
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment