理解一些xpath表达式

时间:2011-02-22 19:46:25

标签: xslt xpath

有人可以帮我解密这个xpath表达式吗?

<xsl:template match="n1:table/@* | 
                     n1:thead/@* | 
                     n1:tfoot/@* | 
                     n1:tbody/@* | 
                     n1:colgroup/@* | 
                     n1:col/@* | 
                     n1:tr/@* | 
                     n1:th/@* | 
                     n1:td/@*">

我相信它在某处:

从n1中选择所有属性:table元素和来自n1的所有属性:thead元素和来自n1:tfoot ...等的所有属性

我真的不确定。

读这篇文章是为了理解xpath: http://www.w3schools.com/xpath/xpath_syntax.asp

小心给我一个提示?

THX。

2 个答案:

答案 0 :(得分:2)

你基本上做对了。 |是XPath'union set运算符:

来自http://www.w3.org/TR/xpath/#node-sets

  

|运算符计算联合   它的操作数,必须是节点集

但是在模式中,来自http://www.w3.org/TR/xslt#patterns

  

在模式中,|指示   备择方案;一个或一个模式   更多|分开的替代品匹配   如果任何一个替代匹配。

因此模板匹配n1相对于当前上下文节点引用的名称空间中table,thead,tbody等的任何属性。

您还需要使用以下内容来解释源文档中是否存在命名空间:

<xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:n1="uri:something">

有关XSLT模板中名称空间的更多信息:

http://radio-weblogs.com/0118231/stories/2006/10/03/xslt10PatternMatchingTipsForSourceDocumentsWithNamespaces.html

答案 1 :(得分:0)

它实际上不是XPath表达式 - 它是一个XSLT模式。模式的语法是表达式语法的一个子集,因此它们密切相关,但语义的工作方式却截然不同。特别是,当XPath表达式选择节点时,模式匹配它们(或者不是,视情况而定)。

无论如何,如果节点与P或Q或两者匹配,则节点匹配模式P | Q,并且如果节点是名为X的元素的属性,则节点与X / @ *匹配,这基本上解释了这种模式。 / p>