逻辑应用程序-使用XSLT-Date格式转换XML

逻辑应用程序-使用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:在样式表编译期间报告了错误”。”, “详情”:[ {

我使用的是一个逻辑应用程序连接器“TransformXML”,集成帐户有一个XSLT映射版本3.0文件

转换所需的XML正在工作,但当我使用C#代码转换日期标记时,会引发以下异常:

有没有人有类似的问题,请让我知道

我的XSLT文件内容




逻辑应用程序中出现错误

*

{
“代码”:“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
}