我的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格式。 请帮忙。提前谢谢。
答案 0 :(得分:3)
使用XSLT 1.0,您需要一种递归方法 您可以尝试使用此命名模板。
<?php $name="";
foreach($_SESSION['datauser'] as $a){
if($a->USERTYPE == '1' || $a->USERTYPE == '2'){
if($name==""){
$name="name";
}
}
}
$name
?>
用你的字符串调用它(例如)。
<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>