WSO2 XSLT Mediator 制表符分隔字符串前的子字符串

WSO2 XSLT Mediator substring-before tab separated string

我正在尝试使用 substring-before 拆分一个制表符分隔值字符串,但我遇到了困难,因为 XSLT 调解器无法正常工作。

xslt 样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:p576="http://p576.test.ws" version="1.0">
 <xsl:output encoding="UTF-8" method="xml" indent="yes"></xsl:output>

  <xsl:param name="NAMESPACE"></xsl:param>
  <xsl:param name="LOG_ID"></xsl:param>

  <xsl:template match="/">
    <xsl:element name="Response" namespace="{$NAMESPACE}">
      <xsl:if test="$LOG_ID">
        <xsl:element name="LogId" namespace="{$NAMESPACE}">
           <xsl:value-of select="$LOG_ID"></xsl:value-of>
        </xsl:element>
     </xsl:if>
     <xsl:element name="Text" namespace="{$NAMESPACE}">
        <xsl:value-of select="substring-before(//p576:execMRPCResponse/p576:execMRPCReturn, '&#x9;')"></xsl:value-of>
     </xsl:element>
   </xsl:element>
  </xsl:template>

</xsl:stylesheet>

字符串:

999900418559    59  4730    Payment Created &amp; Posted

它没有剪切字符串“999900418559”,而是在此处剪切:“999900418559 59 4730 Payment” space 所在的位置。如果你使用 substring-before '$#32;' 会得到同样的结果查看字符串时,意味着制表符和 space 被转换为 space。

有什么办法可以避免这种情况发生吗?或者如果问题出在 wso2 使用的 saxon 版本上,我应该更新它吗(我使用的是 WSO2ESB v4.8.1)?

如果源文档中的制表符被转换为空格,那么这是在 Saxon 看到数据之前发生的。例如,如果数据通过架构验证器并且相关元素的类型使用 "collapse".

的空白面,则可能会发生这种情况

为了防止它发生,您首先需要找出它发生的时间和地点,而您的 post 中没有任何线索(至少对于从未听说过 WSO2ESB 的人而言)。

作为第一个诊断步骤,尝试捕获作为转换输入提供的源文档的确切形式,并检查它包含的空白的状态。

写完之后,我认为还有另一种可能性,即样式表中的 &#x9; 字符引用被编译样式表的任何进程破坏了。您可以通过将 '&#x9;' 替换为 codepoints-to-string(9).

来防御这种情况