如何声明然后在 CDATA 块中使用变量?
Posted
技术标签:
【中文标题】如何声明然后在 CDATA 块中使用变量?【英文标题】:How do I declare then use a variable within a CDATA block? 【发布时间】:2021-01-02 01:57:03 【问题描述】:我有一个 XSL/XML/JS 文件。它是由一个不再在这里工作的人写的,我通常只处理 SQL,所以我不知道如何实现我需要做的事情
我正在尝试将一些变量添加到现有 CDATA 块中的文件中。然后我在函数中使用变量。但是,我尝试了以下方法和变体,但在应用程序(Dynamics AX)中不断出现语法错误。我是否在这里做一些明显错误的事情,无论是我如何声明变量或我如何使用它们?这些是我所做的唯一更改,没有这些更改就没有语法或任何其他问题/错误。
<?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.example.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[
//Minor Repairs email address
var MinorsEmail = xxx@domain.com
//Service Dept email address
var ServiceEmail = yyy@domain.com
//Major Repairs email address
var MajorsEmail = zzz@domain.com
//Select appropriate email to use
function EmailFrom(fault)
var type = fault.substr(0,2);
if (type == "MI")
var ret = MinorsEmail;
else
var ret = concat(ServiceEmail, "; ",MajorsEmail);
return ret;
编辑:在变量值周围添加引号已经解决了部分问题。现在的问题是 CONCAT 没有按预期运行。我现在收到以下错误:
Variable concat has not been declared
【问题讨论】:
如果这些电子邮件地址应该是 javascript 字符串,则可以引用您的字符串值。 您能否edit 提问以添加有关如何在 Dynamics AX 中使用此 xml 文件的信息?我很惊讶为什么文件原样不会产生任何问题,因为 CDATA 块中的代码无效x++ 代码而且我不知道 AX 2009 应该如何执行 Java Script(或者它是 JScript?)代码. 感谢@MartinHonnen 在字符串值中添加引号已解决部分问题。我现在唯一的问题是功能。如果 ELSE 适用,则 CONCAT 不起作用 - 我收到错误消息“未声明变量 concat”。有什么想法吗? 嗨@FH-Inway,您可以在基本 - 设置 - 应用程序集成框架 - XSLT 存储库中添加 XSL 转换。是这个意思吗? JavaScript 中的字符串连接是通过+
运算符 ServiceEmail + "; " + MajorsEmail
完成的
【参考方案1】:
感谢@Martin Honnen,答案是为变量值添加引号,并使用 + 代替 CONCAT:
<?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.example.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[
//Minor Repairs email address
var MinorsEmail = "xxx@domain.com"
//Service Dept email address
var ServiceEmail = "yyy@domain.com"
//Major Repairs email address
var MajorsEmail = "zzz@domain.com"
//Select appropriate email to use
function EmailFrom(fault)
var type = fault.substr(0,2);
if (type == "MI")
var ret = MinorsEmail;
else
var ret = ServiceEmail + "; " + MajorsEmail;
return ret;
【讨论】:
以上是关于如何声明然后在 CDATA 块中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章