XSLT1中處理含有默認名稱空間聲明的XML文檔時的XPATH問題
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