I replace in memory XML node based on specific path before ingestion into NoSQL (marklogic) database.
Input: /doc1.xml
<image xmlns="http://coin/decimal">
<DE>
<denomination>1pf</denomination>
<reverse>rye stalks</reverse>
<obverse>oak sprig</obverse>
<before>Anglo–Saxons</before>
</DE>
<GBP>
<denomination>1p</denomination>
<reverse>Arms</reverse>
<obverse>Queen</obverse>
<before>Anglo–Saxons</before>
</GBP>
</image>
I replace the /before:image/before:DE/before:before
value to a parameter value
Xsl:
const beforeXsl =
fn.head(xdmp.unquote(
` <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:before="http://coin/decimal" version="2.0">
<xsl:template match="/Q{http://coin/decimal}image/Q{http://coin/decimal}DE/Q{http://coin/decimal}before">
<xsl:element name="{local-name()}">
<xsl:value-of select="$replace"/>
</xsl:element>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
`));
xdmp.xsltEval(beforeXsl, doc, params)
Expected output:
<image xmlns="http://coin/decimal">
<DE>
<denomination>1pf</denomination>
<reverse>rye stalks</reverse>
<obverse>oak sprig</obverse>
<before>Anglo-Dutch</before>
</DE>
<GBP>
<denomination>1p</denomination>
<reverse>Arms</reverse>
<obverse>Queen</obverse>
<before>Anglo–Saxons</before>
</GBP>
</image>
I try to parameterize my xsl, but got the error:
[javascript] XSLT-BADPATTERN: MarkLogic extension syntax used, EQNames are not supported in XSLT mode