XSLT 1.0 函数从字符串中删除定界符

XSLT 1.0 Function to remove a delimiter from a string

我正在尝试创建一个可重用的 XSLT 1.0 函数来从任何给定的字符串中删除定界符。由于我在第 3 方应用程序中工作,源 XML 和编译器对我来说是黑盒。如果我使用,我的代码会产生很好的结果: <xsl:value-of select="translate(variable,$delimiter,'')"/> 对于我要清理的每个字符串,但是如果我尝试通过调用 <xsl:value-of select="ecm:rmdelim(variable)"/> 使用我在下面编写的函数,结果会在该点截断。我错过了什么?

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet version="1.0" 
    xmlns="http://www.w3.org/1999/XSL/Transform" 
    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:func="http://exslt.org/functions"
    xmlns:ecm="http://tempuri.org/mynamespace"
    exclude-result-prefixes="ecm"
    extension-element-prefixes="func"
>
  <xsl:output method="text" />
  <!-- set the delimiter -->
  <xsl:variable name="delimiter" select="'^'"/>
  <!-- create function to remove delimiters from a string -->
  <func:function name="ecm:rmdelim">
      <xsl:param name="arg"/>
      <func:result select="translate($arg,$delimiter,'')"/>
  </func:function>

只有当您的处理器支持 EXSLT func:function 扩展元素时,您才能编写自己的函数。很少有处理器这样做。您可以通过查看以下结果来了解您是否这样做:

<xsl:value-of select="element-available('func:function')"/>

Since I am working in a 3rd party application, the source XML and the compiler are black-box to me.

您可以通过应用 identity transform 来查看来源 XML 的样子。

您可以通过以下方式识别处理器:

<xsl:value-of select="system-property('xsl:vendor')"/>