【发布时间】:2015-11-16 13:06:06
【问题描述】:
我以前从未使用过 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>
有人可以建议我如何创建一个应用于“说明”字段的函数,该函数将在“说明”字段中进行搜索,并在存在双引号的地方添加前面的双引号,或者用两个双引号替换现有的引号?
例如,如果说明字段包含:
I have been told to "Go to site asap"
我想将其替换为:
I have been told to ""Go to site asap""
我已经浏览了这个网站和其他网站,看看是否有我可以使用的东西。我发现很多唯一的事情是使用我认为不能与 XSLT 1.0 一起使用的 REPLACE 函数。此外,很多人建议使用递归模板,但我不知道如何使用它或遵循为它提供的示例。我需要花一些时间来弄明白,但我有一个截止日期,这意味着我没有更多时间自己去弄明白。是否可以使用函数来执行此任务?
非常感谢所有帮助
【问题讨论】:
-
提醒一下 - 避免从 MSIE(或大多数 Web 浏览器)复制 XML,因为它会在记录前添加
-,在这种情况下会使您的样式表无效。 -
哎呀,对不起。我在那里看到了它们,但不确定它们是否是样式表的一部分。我现在已经删除了它们。干杯!