2013-06-26 66 views
2

我已经阅读了很多关于忽略命名空间的例子,但似乎无法将这个概念带入模板匹配的内部。xsl模板匹配忽略命名空间

这里是我的示例XML:

<?xml version="1.0"?> 
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <Response xmlns:ResB="http://www.aaa.com/v1" xmlns:dpconf="http://www.datapower.com/param/config" xmlns:exsl="http://xmlns.opentechnology.org/xslt-extensions/common" xmlns="http://www.aaa.com/v2"> 
     <Status> 
      <Code>00000</Code> 
     </Status> 
     </Response> 
    </soapenv:Body> 
</soapenv:Envelope> 

我不能在ouptut的命名空间。这里的期望输出的一个例子:

<A> 
    <Transformed>0000</Transformed> 
</A> 

这不是我的输出节点,所以我怎么能有一个XSLT来匹配响应节点和关闭的这项工作?

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="//*[local-name() = 'Response']"> 
<A> 
<Transformed><xsl:value-of select="Status/Code"/></Transformed> 
</A> 

回答

9

为什么要忽略命名空间?只需声明并使用它。

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:v2="http://www.aaa.com/v2" 
    exclude-result-prefixes="v2" 
> 
    <xsl:template match="v2:Response"> 
    <A> 
     <Transformed> 
     <xsl:value-of select="v2:Status/v2:Code" /> 
     </Transformed> 
    </A> 
    </xsl:template> 
</xsl:stylesheet>