首页 > 解决方案 > 如何在一个 xsl 文件中删除和添加命名空间

问题描述

我有两个 xsl 文件连接到 BizTalk 接收位置中的管道。一个从接收到的消息中删除命名空间,一个向它添加命名空间。由于 BizTalk 应用程序在双节点群集上运行,因此 xsl 文件并不总是在同一节点上执行。这会导致消息被挂起。是否可以在一个 xsl 文件中删除和添加命名空间?

我在 xslt 中很新,有人可以给我一个线索吗?

这是第一个删除命名空间的 xsl 代码:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
 exclude-result-prefixes="msxsl"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@* | node()" />
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name()}">
            <xsl:value-of select="." />
        </xsl:attribute>
    </xsl:template>
    <xsl:template match="text() | comment() | processing-instruction()">
        <xsl:copy />
    </xsl:template>
</xsl:stylesheet>

这是添加命名空间的第二个 xsl 代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0"  xmlns:utFil="http://www.healthxml.org/Schemas/CEN/1613/2001/01/LaboratoryServiceRequest">
    <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" version="1.0"/>

<xsl:template match="*">
  <xsl:copy><xsl:apply-templates/></xsl:copy>
  </xsl:template>

<xsl:template match="*[namespace-uri()='']">
  <xsl:element name="{local-name()}" namespace="http://www.healthxml.org/Schemas/CEN/1613/2001/01/LaboratoryServiceRequest/kit">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>
</xsl:stylesheet>

标签: xsltnamespacescluster-computingbiztalkpipeline

解决方案


所以,你真正在做的是改变命名空间,恐怕你已经让它变得比需要的更复杂了。

您所需要的只是一个带有新目标命名空间和映射器文件的模式,该文件使用 Mass Copy Functoid

为清楚起见,我是说您不应该使用自定义 xlst,因为您不需要,这可以在端口上指定的一个地图中完成。

此外,您有一个两个节点的集群应该没有关系。如果是这样,则表明存在完全不同的问题。


推荐阅读