当XML不带命名空间时,通过XPath获取XML节点很简单,详见w3school。
当XML带有(多个)命名空间时:
一、问题及解决
XML文档结构:
根节点Workbook:
如果要读取最后一个Worksheet节点的子节点:
XPath为"//Worksheet[last()]/Table/Row[1]/Cell[1]"时是取不到值的。
这是可以用//*[local-name()=’XXX’]或者./*[name()='xxx']来取值。
举个栗子:
<xsl:template match="//*[local-name()='Workbook']">//*[local-name()='Workbook']获得的是节点集,其中的节点满足要求:去掉命名空间后的节点名是Workbook
XSL函数:
local-name
该local-name函数返回一个表示给定节点集中第一个节点的本地名称的字符串。
语法:
local-name( [node-set] )参数
node-set (可选的)
将返回此节点集中第一个节点的本地名称。如果省略此参数,将使用当前上下文节点。
Returns
字符串。
Notes
本地名称是扩展名的本地名称。
参考:https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/local-name
https://msdn.microsoft.com/zh-cn/library/ms950779.aspx#EFAA