如何从第三方业务服务响应消息中删除空白 xmlns 属性

How can i remove blank xmlns attribute from thirdparty business service response message

我有第三方服务。此服务的其中一个元素返回空 xmlns 值

这是业务服务响应

如您所见,IthalatBeyannameler 元素有一个空白的 xmlns="" 这就是 xslt 转换不起作用的原因。

这是我的 xslt

 <xsl:template match="/">
  <tns:KalemMarkaList>
     <xsl:for-each select="/ns0:AntrepoCikisDigerResponse/ns0:AntrepoCikisDigerResult/ns0:IthalatBeyannameler/ns0:IthalatBeyanname">
        <tns:KalemMarka>
           <tns:Sasi/>
           <tns:MaviRef>
              <xsl:value-of select="ns0:MaviRef"/>
           </tns:MaviRef>
           <tns:MusteriIsNo>
              <xsl:value-of select="ns0:MusteriIsNo"/>
           </tns:MusteriIsNo>
           <tns:Yil>
              <xsl:value-of select="ns0:Yil"/>
           </tns:Yil>
        </tns:KalemMarka>
     </xsl:for-each>
  </tns:KalemMarkaList>

我该如何解决这个问题。

如果 IthalatBeyannamele 元素(及其后代)应该在命名空间 http://tempuri.org/ 中,那么您需要修复 [或说服供应商修复] 将它们放入 null 的代码命名空间。 (是否有此 API 返回的 XML 的说明,如果有,说明了什么?)

另一方面,如果元素应该在 null 命名空间中,那么您需要修复样式表以在该命名空间中处理它们。

请注意,您的问题不是命名空间(未)声明,而是元素位于错误命名空间的事实。

As you see, IthalatBeyannameler element has a blank xmlns="" thats why xslt transforming not working.

没有。您的转换不起作用,因为您忽略了它。您尝试 select:

<xsl:for-each select="/ns0:AntrepoCikisDigerResponse/ns0:AntrepoCikisDigerResult/ns0:IthalatBeyannameler/ns0:IthalatBeyanname">

你应该在什么时候做:

<xsl:for-each select="/ns0:AntrepoCikisDigerResponse/ns0:AntrepoCikisDigerResult/IthalatBeyannameler/IthalatBeyanname">

即在寻址由于无命名空间声明而位于无命名空间中的元素时删除 ns0 前缀。

出于同样的原因你需要更改:

<xsl:value-of select="ns0:MaviRef"/>

至:

<xsl:value-of select="MaviRef"/>

另外两个 xsl:value-of 指令也是如此。