gpt4 book ai didi

xslt - 如何在一个 xsl 文件中删除和添加命名空间

转载 作者:行者123 更新时间:2023-12-04 16:59:55 25 4
gpt4 key购买 nike

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

我是 xslt 的新手,有人能给我一个线索吗?

这是第一个 xsl-code 删除命名空间:

<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-code 添加命名空间:
<?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>

最佳答案

仅使用 XSLT 来添加 namespace 不会太远,因为它并不是真正地向现有元素添加 namespace ,而是创建具有相同本地名称但在新 namespace 中的新元素。您只需要更改模板即可为所有元素执行此操作,而不仅仅是没有命名空间的元素

试试这个 XSLT

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

<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://www.healthxml.org/Schemas/CEN/1613/2001/01/LaboratoryServiceRequest/kit">
<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>

请注意,如果您有两个具有相同本地名称但 namespace 不同的属性,您可能会遇到问题,尽管这种情况可能并不常见。例如:
<test xmlns:a="a" a:attr="1" attr="1" />

关于xslt - 如何在一个 xsl 文件中删除和添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50643269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com