【问题标题】:How can i remove blank xmlns attribute from thirdparty business service response message如何从第三方业务服务响应消息中删除空白 xmlns 属性
【发布时间】:2026-02-21 15:25:04
【问题描述】:

我有第三方服务。在此服务的元素之一中返回一个空的 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>

我该如何解决这个问题。

【问题讨论】:

    标签: xml oracle web-services xslt soa


    【解决方案1】:

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

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

    <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 指令也是如此。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】: