替换单引号"双引号""使用XSLT 1.0

时间:2015-11-16 13:06:06

标签: xml xslt

我以前从未使用过XML / XSLT / JScript,而且很快就会尝试学习。

我正在使用XSLT 1.0和XML创建CSV文件。我有下面的代码,由外部软件开发人员创建,他们目前无法提供帮助,除了一个问题外,它可以正常工作并按要求执行。我需要替换所有出现的单引号字符"使用双引号字符"",以确保引号字符的正确转义。

>   <?xml version="1.0" encoding="utf-16" ?> 
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:mxm="http://schemas.microsoft.com/dynamics/2008/01/documents/MxmServInterfaceOutboundAif" 
xmlns:data="http://www.maxima.com/data" exclude-result-prefixes="xs xsi xsl">
<xsl:output method="text" encoding="UTF-8" indent="no" /> 
 <msxsl:script language="JScript" implements-prefix="data">
 <![CDATA[
function convertDate(dt)
  {     
    var yy = dt.substr(6, 2);
    var mm = dt.substr(3, 2);
    var dd = dt.substr(0, 2);
    var ret = "20"+yy+mm+dd;

    return ret.toString();  
  }    

  function convertTime(dt)
  {     
    var ss = dt.substr(6, 2);
    var mm = dt.substr(3, 2);
    var hh = dt.substr(0, 2);
    var ret = hh+mm+ss;

    return ret.toString();  
  }

  function IncidentType(fault)
  {
    var type = fault.substr(0,2);
    if (type == "PM")
      {
      var ret = "MAINTENANCE";
      }
      else
      {
      var ret = "CALLOUT";
      }

    return ret;                           
  }


]]> 
</msxsl:script>
 <xsl:template match="/">
<xsl:apply-templates select="Visit" /> 
</xsl:template>
 <xsl:template match="/Visit/MxmServCallVisit">

"Incident_ID","Incident_Type","Created_Date","Created_Time","Notes"
" 
<xsl:value-of select="./JobId" /> 
"," 
<xsl:value-of select="data:IncidentType(string(./MxmServCall/FaultId))" /> 
"," 
<xsl:value-of select="data:convertDate(string(./MxmServCall/LoggedDate))" /> 
"," 
<xsl:value-of select="data:convertTime(string(./MxmServCall/LoggedTime))" /> 
"," 
<xsl:value-of select="./Instructions" /> 
" 
</xsl:template>
</xsl:stylesheet>

有人可以建议我如何创建一个函数来应用于“说明”字段,该字段将搜索“说明”字段,并在存在双引号的地方添加前面的双引号,或者用两个双引号替换现有引号? / p>

例如,如果说明字段包含:

I have been told to "Go to site asap"

我想将其替换为:

I have been told to ""Go to site asap""

我已经浏览了这个网站和其他网站,看看是否有我可以使用的东西。我发现很多东西是使用REPLACE函数,我相信它不能用于XSLT 1.0。此外,很多人都建议使用递归模板,但我不知道如何使用它或遵循为它提供的示例。我需要花一些时间来弄清楚,但我有一个截止日期,这意味着我没有更多的时间来试图弄清楚自己。是否可以使用函数来执行此任务?

所有帮助最受赞赏

1 个答案:

答案 0 :(得分:1)

因为你已经使用过JScript我假设你可以添加另一个函数

function replace(string, regexPattern, repl) {
  return string.replace(new RegExp(regexPattern, 'g'), repl);
}

在JScript部分内,然后执行

<xsl:value-of select="data:replace(string(Instructions), '&quot;', '&quot;&quot;')" />