有没有任何方法可以动态地将头分配给XSLT中的XML元素



我正在尝试构建一个通用接口,通过连接XML元素将24种不同的XML结构转换为平面文件。在Dell Boomi中,我们可以选择动态地将变量名传递给XSLT。如下所示:

<xsl:variable name="headers" select="boomi:get-ddp('DDP_Headers')"/>

我们已经将所有24个XML节点名称存储在表行中。例如:

CLIENTID,',',CLIENTNAME,',',CLIENTADDRESS,',',....,',',CLIENTCONTACT

PERSONID,',',PERSONNAME,',',PERSONADDRESS,',',....,',',PERSONCONTACT

......,',',.......,',',... etc

当我们传递变量名并在Concat函数中使用它时,它将作为字符串,只打印string而不是XML元素值。这是我们尝试过的代码。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:boomi="http://boomi.com/custom-function">
<xsl:output method="text" encoding="utf-8" />
<xsl:variable name="headers" select="boomi:get-ddp('DDP_Headers')"/>
<xsl:template match="/">
<xsl:for-each select="//externalKPIClientProductivity">
<xsl:value-of select="concat($headers,'&#xA;')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

代码与以下示例配合良好:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:boomi="http://boomi.com/custom-function">
<xsl:output method="text" encoding="utf-8" />
<xsl:variable name="headers" select="boomi:get-ddp('DDP_Headers')"/>
<xsl:template match="/">
<xsl:for-each select="//externalKPIClientProductivity">
<!-- <xsl:value-of select="@id" />  -->
<!--<xsl:value-of
select="concat($headers,'&#xA;')" />-->
<xsl:value-of
select="concat(CLIENTID,',',CLIENTNAME,',',CLIENTADDRESS,',',PAY,',',CLIENTLOCATION,',',XRFCODE,',',CLIENTCONTACT,'&#xA;')" /> 
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

有人能帮助我如何将这些动态XML元素传递给Concat函数,使其作为XML元素工作并检索数据,而不是打印相同的字符串文件吗?例如:

CLIENTID,',',CLIENTNAME,',',CLIENTADDRESS,',',PAY,',',CLIENTLOCATION,',',XRFCODE,',',CLIENTCONTACT
CLIENTID,',',CLIENTNAME,',',CLIENTADDRESS,',',PAY,',',CLIENTLOCATION,',',XRFCODE,',',CLIENTCONTACT
CLIENTID,',',CLIENTNAME,',',CLIENTADDRESS,',',PAY,',',CLIENTLOCATION,',',XRFCODE,',',CLIENTCONTACT
..................

提前感谢!!直流

如果您的环境支持带有Saxon PE或EE的XSLT3(https://help.boomi.com/bundle/integration/page/int-XSLT_Stylesheet_Components_13300ba8-5e94-4b14-b6bd-5b90d7002233.html似乎表明(或使用Saxon 10,其中xsl:evaluate在所有版本中都受支持,则一种方法是使用例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" version="3.0">
<xsl:param name="fields" as="xs:string">foo,bar,baz</xsl:param>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="//item">
<xsl:value-of separator=",">
<xsl:evaluate xpath="$fields" context-item="."/>
</xsl:value-of>
<xsl:text>&#10;</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

请注意,我只传入了param中的字段名,并选择将分隔符介绍委托给xsl:value-of。但是,您也可以像问题中那样使用插入了任何分隔符字符串的字符串,并将其传递给xsl:evaluate:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" version="3.0">
<xsl:param name="fields" as="xs:string">foo,',',bar,',',baz</xsl:param>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="//item">
<xsl:evaluate xpath="$fields" context-item="."/>
<xsl:text>&#10;</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

作为XSLT3中的第三个选项,您可以尝试一个具有shadow属性的静态参数:

<xsl:variable name="headers" static="yes" select="boomi:get-ddp('DDP_Headers')"/>
<xsl:value-of _select="concat({$headers},'&#xA;')" />

但是,我不能判断您的环境中的扩展函数是否设置为与静态参数一起使用。

相关内容

  • 没有找到相关文章

最新更新