My xml:
<workorder>
<specifications>
<hpath>94 72</hpath>
<classdesc></classdesc>
</specifications>
</workorder>
我的 XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:output method="text" encoding="UTF-8" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="workorder">
<xsl:apply-templates select="specifications" />
</xsl:template>
<xsl:template match="specifications">
<xsl:text>{
"Hierarchy Path"="</xsl:text>
<xsl:value-of select="translate(//workorder/specifications/hpath,'','\')" />
<xsl:text>"
}</xsl:text>
</xsl:template>
</xsl:stylesheet>
预期输出为:
{
"Hierarchy Path"="94 \ 72"
}
电流输出为:
{
"Hierarchy Path"="94 72"
}
问题是:当我将 json 格式作为"当前输出"发送时,不是有效的 json 格式。如果我作为"预期输出"发送,则它是有效的 json 格式。请帮忙。提前谢谢。
对于 XSLT 1.0,您需要一种递归方法。
您可以尝试类似此命名模板的内容。
<xsl:template name="jsonescape">
<xsl:param name="str" select="."/>
<xsl:choose>
<xsl:when test="contains($str, '')">
<xsl:value-of select="concat(substring-before($str, ''), '\' )"/>
<xsl:call-template name="jsonescape">
<xsl:with-param name="str" select="substring-after($str, '')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
并用你的字符串调用它(例如)。
<xsl:call-template name="jsonescape">
<xsl:with-param name="str" select="//workorder/specifications/hpath"/>
</xsl:call-template>