Re: [xsl] Json to xml

Subject: Re: [xsl] Json to xml
From: "dvint@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 14 Mar 2025 18:38:53 -0000
I'm trying to do something like this now:

	<xsl:variable name="PROERPTIES">
		<xsl:if test="$RUNWITH='XML'">
			<xsl:value-of select="/j:map/j:map[@key='properties']"/>
		</xsl:if>
		<xsl:if test="$RUNWITH='JSON'">
			<xsl:value-of select="json-to-xml(., map { 'escape' : true()
				})/j:map/j:map[@key='properties']"/>
		</xsl:if>

</xsl:variable>

In the main XSLT I do this
<xsl:param name="RUNWITH" select="JSON"/>
and the included XSLT
<xsl:param name="RUNWITH" select="XML"/>

But this is giving me a Duplicate global variable error.

I tried to use the json-to-xml() function to act as a test for the type of content being processed and that throws an error when called with an XML file.

Is there some way I can determine the format of the file being processed from the commandline so I can do the right thing here?

I've also tried modifying the place where I use the variable, currently like this

<xsl:value-of select="$PROPERTIES/j:map[@key=$ID]/j:string[@key='displayName']"/>

I tried changing this to find the content directly without the variable to this:

<xsl:value-of select="ancestoer::j:map[@key='properties']/j:map[@key=$ID]/j:string[@key='displayName']"/>

But I get a message about not having context and will never produce a value.

..dan

On 2025-03-14 10:20, dvint@xxxxxxxxx wrote:
In trying to build a small sample I have found where the problem is
coming from. It looks like this might be a timing issue of when the
stylesheet is read vs when the json-to-sml() file is triggered and
that XML becomes available to evaluate.

At the top of the included XSLT is this

<!-- Remeber thsi content to lookup details later -->
<xsl:variable name="PROPERTIES" select="/j:map/j:map[@key='properties']"/>


I use this value to lookup details that are linked to much further
down and deeply nested. This works prefectly when using this XSLT
standalone with the generated XML file.

I'm guessing what happens when it is included in the main XSLT, that
this variable is being set based upon the JSON file that the main XSLT
is called with.

In the main XSLT, I moved this declaration out of the template so the
variable is global:

<xsl:variable name="MAPFILE" select="json-to-xml(., map { 'escape' :
true() })"/>

I then modified the PROPERTIES variable to use $MAPFILE and it now works.

		<!-- Remeber thsi content to lookup details later  -->
	<xsl:variable name="PROPERTIES"
select="$MAPFILE/j:map/j:map[@key='properties']"/>

BUT it is now no longer possible to run the second stylesheet standalone.

So, I've found the problem and need to find a better way to capture
this information.

..dan


On 2025-03-13 23:55, Martin Honnen martin.honnen@xxxxxx wrote:
On 13/03/2025 19:25, dvint@xxxxxxxxx wrote:
I'll try and see if I can make a small sample JSON and associated
included XSLT.


Please do that, I couldn't see any obviuous mistakes in the code you posted.

Current Thread