XPath获取带命名空间的XML

时间:2021-01-23 22:17:53

当XML不带命名空间时,通过XPath获取XML节点很简单,详见w3school

当XML带有(多个)命名空间时:

一、问题及解决

XML文档结构:

XPath获取带命名空间的XML

根节点Workbook:

XPath获取带命名空间的XML

如果要读取最后一个Worksheet节点的子节点:

XPath获取带命名空间的XML

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