XSLT1中使用XPATH对含有默认名称空间声明的XML文档进行查找时是查不出内容的
例如对于
<requestHierarchySelectResult xmlns
=http://www.lightcc.com/ns xmlns
:cs
="http://www.customsolids.com">
<request
>
<created_dt
>05/05/2000 00:00:00</created_dt
>
<created_tm
>01/01/1900 14:02:46</created_tm
>
<cs
:request_id
>100002</cs
:request_id
>
</request
>
</requestHierarchySelectResult
>
应用
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns="http://www.lightcc.com/ns"
xmlns:cs="http://www.customsolids.com">
<xsl:template match="/">
<root><xsl:apply-templates select="/*/request"/></root>
</xsl:template>
<xsl:template match="*|@*|node()"/>
<xsl:template match="request">
<gotHere><xsl:value-of select="."/></gotHere>
</xsl:template>
</xsl:stylesheet>
是没有效果的.
需要给默认的名称空间指定一个前缀
<
xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:lc="http://www.lightcc.com/ns"
xmlns:cs="http://www.customsolids.com">
<xsl:template match="/">
<root><xsl:apply-templates select="/*/lc:request"/></root>
</xsl:template>
<xsl:template match="*|@*|node()"/>
<xsl:template match="lc:request">
<gotHere><xsl:value-of select="."/></gotHere>
</xsl:template>
</xsl:stylesheet>
据说XSLT2和XPATH2会解决这个问题
参考:
http://www.edankert.com/defaultnamespaces.html http://www.topxml.com/people/bosley/defaultns.asp