使用命名空间内的值进行XSLT转换

时间:2017-08-11 17:30:32

标签: xml parsing xslt

我想使用XSLT进行解析。

我的XML:

   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:obtenerListaMisionesResponse xmlns:ns2="http://Servicios/">
         <return>
            <codMisiones>1</codMisiones>
            <correoMision>Foo</correoMision>
            <nombreMision>Bar</nombreMision>
         </return>
         <return>
            <codMisiones>2</codMisiones>
            <correoMision>Foo 2</correoMision>
            <nombreMision>Bar 2</nombreMision>
         </return>
      </ns2:obtenerListaMisionesResponse>
   </S:Body>
</S:Envelope>

然后我尝试使用这个XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="obtenerListaMisionesResponse">
       <xsl:for-each select="return">
            <xsl:value-of select="nombreMision"/>
       </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

但我有这个回报:

  

1 Foo Bar 2 Foo2 Bar2

我想要的时候:

  

Bar Bar2

我认为是因为我的命名空间在里面,但我不明白什么是错的。

1 个答案:

答案 0 :(得分:1)

您是对的,obtenerListaMisionesResponsens2:obtenerListaMisionesResponse的名称不同,因此您的模板与其不匹配。

尝试匹配ns2:obtenerListaMisionesResponse,并在您的XSLT根元素中包含xmlns:ns2=..声明。