xslt - 如何在一个 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>
解决方案
所以,你真正在做的是改变命名空间,恐怕你已经让它变得比需要的更复杂了。
您所需要的只是一个带有新目标命名空间和映射器文件的模式,该文件使用 Mass Copy Functoid。
为清楚起见,我是说您不应该使用自定义 xlst,因为您不需要,这可以在端口上指定的一个地图中完成。
此外,您有一个两个节点的集群应该没有关系。如果是这样,则表明存在完全不同的问题。
推荐阅读
- python - 用numpy数组中的最近邻居填充nan
- ipsec - IPSec ESP 填充长度字段
- php - 如何修复警告:使用未定义的常量活动 - 假定为“活动”(这将在 PHP 的未来版本中引发错误)
- bash - 如何使用 shell 脚本查找模式并在中间插入文本
- html - 为什么浏览器会缩小图像,尽管它的容器看起来足够大以容纳其完整尺寸?
- python - 无法将 pyodbc cursor.execute 结果转换为数据框
- excel - Excel VBA根据输入创建工作表名称
- java - 尝试从 AWS Lambda 担任角色时“配置文件不能为空”
- flutter - 为什么不使用卡片列表重新绘制搜索小部件?
- apache-spark - SparkSQL中shuffle时Spark如何决定下一阶段的分区数?