逻辑应用程序-使用XSLT-Date格式转换XML
我使用的是一个逻辑应用程序连接器“TransformXML”,集成帐户有一个XSLT映射版本3.0文件 转换所需的XML正在工作,但当我使用C#代码转换日期标记时,会引发以下异常: 有没有人有类似的问题,请让我知道 我的XSLT文件内容逻辑应用程序-使用XSLT-Date格式转换XML,xml,xslt,azure-logic-apps,Xml,Xslt,Azure Logic Apps,我使用的是一个逻辑应用程序连接器“TransformXML”,集成帐户有一个XSLT映射版本3.0文件 转换所需的XML正在工作,但当我使用C#代码转换日期标记时,会引发以下异常: 有没有人有类似的问题,请让我知道 我的XSLT文件内容 逻辑应用程序中出现错误 * { “代码”:“InvalidXSLT内容”, “消息”:“使用提供的映射转换给定输入时出错。详细信息:'net.sf.saxon.trans.XPathException:在样式表编译期间报告了错误”。”, “详情”:[ {
逻辑应用程序中出现错误 *
{
“代码”:“InvalidXSLT内容”,
“消息”:“使用提供的映射转换给定输入时出错。详细信息:'net.sf.saxon.trans.XPathException:在样式表编译期间报告了错误”。”,
“详情”:[
{
“代码”:“InvalidXSLT内容”,
“Message:“{\”StatusCode\”:400,“ErrorCode\”:7,“Details\”:null,“Message\:\”使用提供的映射转换给定输入时出错。详细信息:“net.sf.saxon.trans.XPathException:在样式表编译过程中报告了错误。“\”,“Data\:{},\“InnerException\”:null,\“TargetSite\:{\”Name\:“MoveNext\”,“AssemblyName\:\”Microsoft.Azure.Function.Common.Cloud,版本=1.0.0,区域性=neutral,PublicKeyToken=31bf3856ad364e35\”,“ClassName\”:“Microsoft.Azure.Function.XSLT30 Transform.BaseXSLT30 Transformer+d拞3\,“Signature\”:“Void MoveNext()”,“Signature2\”:“System.Void MoveNext()”,“MemberType\”:8,“GenericArguments\”:null\,“StackTrace\:”在Microsoft.Azure.Function.XSLT30 Transform.BaseXSLT30 Transformer.d_u3.MoveNext()中在X:\\\\bt\\\\1186352\\\\repo\\\\src\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\函数.Common.Cloud.Xml\\\\\\\\\\\BaseXslt30Transformer.cs:75行\\\\r\\r\\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\r\\n在System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()\\r\\n在Microsoft.Azure.Function.xslt30 transform.xslt30 transfermrequestprocessor.d_u2.MoveNext()在X:\\\bt\\\\1186352\\\\repo\\\\src\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\XSLT30TransferMRequestProcessor.cs:line 50\,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
“详细信息”:空,
“InnerError”:空
}
],
“InnerError”:空
}
提前感谢。XSLT 3支持XPath 3.1函数
format date
和format dateTime
,因此我会尝试将它们用于日期格式化。对于日期解析也有一些有限的支持,但是“本机”XSLT/XPath 2和更高版本的xs:date格式是YYYY-MM-DD
。但是,通常很容易定义XSLT函数,将不同的日期格式转换为xs:date
格式。如果使用XSLT映射version=“1.0”
而不是version=“3.0”
,那么嵌入的C代码是否有效?我看不到XSLT内部有任何使用XSLT 3特性的内容,因此,如果您想在XSLT内部使用C#,那么您可能可以使用XSLT 1实现这一点,我假设使用的是xslcomiledtransform
,而不是Saxon。即使对于XslCompiledTransform,您也可能需要允许在XSLT中使用嵌入式C#。@MartinHonnen我已经尝试了格式化日期函数以及XSLT 2.0和3.0,当我在Visual Studio中调试它时,它工作得很好。唯一的问题是,当我在逻辑应用程序中对Azure集成帐户映射文件使用相同的XSLT时,它会抛出错误。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:userCSharp="urn:my-scripts"
exclude-result-prefixes="msxsl"![97882-error.png][1]
>
<msxsl:script language="C#" implements-prefix="userCSharp">
<![CDATA[
public string FormatDateFunction(string inputDate)
{
string formatdate;
if(string.IsNullOrEmpty(inputDate))
return "";
formatdate = System.DateTime.Parse(inputDate).ToString("M/dd/yyyy");
return formatdate;
}
]]>
</msxsl:script>
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="paramDate">
<xsl:value-of select="/*/XPathBody/Data" />
</xsl:variable>
<xsl:template match="/">
<MyHeader_1.0>
<MyTag>
<DueDate>
<xsl:value-of select="userCSharp:FormatDateFunction($paramDate)"/>
</DueDate>
<MyDate>
<xsl:choose>
<xsl:when test="$paramDate != ''">
<xsl:value-of select="userCSharp:FormatDateFunction($paramDate)"/>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</MyDate>
</MyTag>
</MyHeader_1.0>
</xsl:template>
</xsl:stylesheet>
{
"Code": "InvalidXsltContent",
"Message": "An error occurred while transforming the given input with the provided map. Details: 'net.sf.saxon.trans.XPathException: Errors were reported during stylesheet compilation'.",
"Details": [
{
"Code": "InvalidXsltContent",
"Message": "{\"StatusCode\":400,\"ErrorCode\":7,\"Details\":null,\"Message\":\"An error occurred while transforming the given input with the provided map. Details: 'net.sf.saxon.trans.XPathException: Errors were reported during stylesheet compilation'.\",\"Data\":{},\"InnerException\":null,\"TargetSite\":{\"Name\":\"MoveNext\",\"AssemblyName\":\"Microsoft.Azure.Function.Common.Cloud, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\",\"ClassName\":\"Microsoft.Azure.Function.Xslt30Transform.BaseXslt30Transformer+<Transform>d__3\",\"Signature\":\"Void MoveNext()\",\"Signature2\":\"System.Void MoveNext()\",\"MemberType\":8,\"GenericArguments\":null},\"StackTrace\":\" at Microsoft.Azure.Function.Xslt30Transform.BaseXslt30Transformer.<Transform>d__3.MoveNext() in X:\\\\bt\\\\1186352\\\\repo\\\\src\\\\functions\\\\Scripts\\\\Function.Common.Cloud\\\\Xml\\\\BaseXslt30Transformer.cs:line 75\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()\\r\\n at Microsoft.Azure.Function.Xslt30Transform.Xslt30TransformRequestProcessor.<ProcessTransformRequest>d__2.MoveNext() in X:\\\\bt\\\\1186352\\\\repo\\\\src\\\\functions\\\\Scripts\\\\Function.Xslt30Transform\\\\Xslt30TransformRequestProcessor.cs:line 50\",\"HelpLink\":null,\"Source\":\"Microsoft.Azure.Function.Common.Cloud\",\"HResult\":-2146233088}",
"Details": null,
"InnerError": null
}
],
"InnerError": null
}