栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

XSLT +用转义序列替换双引号

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XSLT +用转义序列替换双引号

将此模板添加到您的代码中

    <xsl:template name="escapeQuote">      <xsl:param name="pText" select="."/>      <xsl:if test="string-length($pText) >0">       <xsl:value-of select=        "substring-before(concat($pText, '&quot;'), '&quot;')"/>       <xsl:if test="contains($pText, '&quot;')">        <xsl:text>"</xsl:text>        <xsl:call-template name="escapeQuote">          <xsl:with-param name="pText" select=          "substring-after($pText, '&quot;')"/>        </xsl:call-template>       </xsl:if>      </xsl:if>    </xsl:template>

然后更改

<xsl:value-of select="."/>

<xsl:call-template name="escapeQuote"/>

您的完整转换现在变为

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">        <xsl:output method="text" media-type="text/csv" encoding="UTF-8"/>        <xsl:param name="RowDelim">],</xsl:param>        <xsl:param name="RowLast">]</xsl:param>        <xsl:param name="RowStart">[</xsl:param>        <xsl:param name="startBracket">{ </xsl:param>        <xsl:param name="JQTableData">"aaData": [</xsl:param>        <xsl:param name="JQTableEnd">] }</xsl:param>        <xsl:param name="FieldDelim">,</xsl:param>        <xsl:param name="StringDelim">"</xsl:param>        <xsl:param name="DateFormat">yyyy-MM-dd HH:mm:ss</xsl:param>        <xsl:template match="/"> <xsl:for-each select="Rowsets">     <xsl:for-each select="Rowset">     <xsl:value-of select="$startBracket"/>     <xsl:value-of select="$JQTableData"/>         <xsl:variable name="CurrentColumns" select="Columns"/>         <xsl:for-each select="Columns">  <xsl:for-each select="Column">      <xsl:if test="not(position() = last())">      </xsl:if>  </xsl:for-each>         </xsl:for-each>         <xsl:for-each select="Row">         <xsl:value-of select="$RowStart"/>  <xsl:for-each select="*">      <xsl:variable name="ColName">          <xsl:value-of select="name(.)"/>      </xsl:variable>      <xsl:variable name="ColType">          <xsl:value-of select="$CurrentColumns/Column[@Name=$ColName]/@SQLDataType"/>      </xsl:variable>      <xsl:choose>          <xsl:when test="$ColType= '2' or $ColType= '3' or $ColType= '4' or $ColType= '5' or    $ColType= '6' or $ColType= '7' or $ColType= '8' or $ColType= '-7'">   <xsl:value-of select="."/>          </xsl:when>          <xsl:otherwise>   <xsl:value-of select="$StringDelim"/>   <xsl:choose>       <xsl:when test="$ColType= '91' or $ColType= '92' or $ColType= '93'"><xsl:choose>    <xsl:when test=". = 'TimeUnavailable'">        <xsl:value-of select="."/>    </xsl:when>    <xsl:otherwise>    </xsl:otherwise></xsl:choose>       </xsl:when>       <xsl:otherwise>       <xsl:choose><xsl:when test=". = 'true'">    <xsl:text>Y</xsl:text></xsl:when><xsl:when test=". = 'false'">    <xsl:text>N</xsl:text></xsl:when><xsl:otherwise>  <xsl:call-template name="escapeQuote"/>    <!-- <xsl:value-of select="."/> --></xsl:otherwise></xsl:choose>       </xsl:otherwise>   </xsl:choose>   <xsl:value-of select="$StringDelim"/>          </xsl:otherwise>      </xsl:choose>      <xsl:if test="not(position() = last())">          <xsl:value-of select="$FieldDelim"/>      </xsl:if>  </xsl:for-each>          <xsl:if test="not(position() = last())">          <xsl:value-of select="$RowDelim"/>      </xsl:if>          <xsl:if test="position() = last()">          <xsl:value-of select="$RowLast"/>      </xsl:if>         </xsl:for-each>         <xsl:value-of select="$JQTableEnd"/>     </xsl:for-each> </xsl:for-each>        </xsl:template>        <xsl:template name="escapeQuote">          <xsl:param name="pText" select="."/>          <xsl:if test="string-length($pText) >0"><xsl:value-of select= "substring-before(concat($pText, '&quot;'), '&quot;')"/><xsl:if test="contains($pText, '&quot;')"> <xsl:text>"</xsl:text> <xsl:call-template name="escapeQuote">   <xsl:with-param name="pText" select=   "substring-after($pText, '&quot;')"/> </xsl:call-template></xsl:if>          </xsl:if>        </xsl:template></xsl:stylesheet>

当此转换应用于提供的XML文档时

<Rowsets>    <Rowset>        <Columns> <Column Description="Element_1" SQLDataType="12" /> <Column Description="Element_2" SQLDataType="12" /> <Column Description="Element_3" SQLDataType="93" />        </Columns>        <Row> <Element_1>test_data</Element_1> <Element_2>test_quo"te</Element_2> <Element_3>test_data</Element_3>        </Row>    </Rowset></Rowsets>

产生想要的正确结果

{ "aaData": [["test_data","test_quo"te","test_data"]] }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号