xslt 1.0 - 将stirng反斜杠转换为双反斜杠

时间:2016-03-23 00:35:41

标签: json xslt-1.0

我的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格式。 请帮忙。提前谢谢。

1 个答案:

答案 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>