2

在工作中,我正在更新一些 XSLT 转换代码,在某些地方,以前的程序员使用前一个表达式从 XML 文档中检索名为 SOME_LABEL 的元素的值。

//*[self::SOME_LABEL] 和 //SOME_LABEL 形式似乎都产生相同的结果节点集。

最初的程序员不再在这里工作,但在我的研究中,我找不到任何理由前者比后者更可取。我当然不想破坏工作代码,但第二种形式更具可读性和自我记录(可维护性)。

我倾向于在我正在编写的新代码中使用它来完成相同的结果,并希望使所有这些表达式保持一致;不这样做会使代码奇怪地混合了两者。

有什么理由我不应该将第一种形式的所有出现都更改为第二种形式吗?

4

2 回答 2

2

在 XPath 表示法中,表达式与 有何//*[self::SOME_LABEL]不同//SOME_LABEL

它的可读性不同。否则是等价的。

在 XPath 1.0中使用轴的一个原因self是,当您想要在给定路径位置选择一组不同的元素节点时,这些节点的类型很长并且您不想重复:

/some/longish[@and='complicated']/path/then[ self::a or self::b or self::c ]

在您的示例中不是这种情况。因此,您可以进行更改以简化维护。

于 2012-06-06T16:07:31.157 回答
1

默认轴是 child:: ,因此含义不同。下图由 Crane Softwrights 提供。

有效的 XHTML.

然而, //*[self::X] 确实会匹配与 //X 相同的节点。所以是的,做这个替换。

于 2012-06-06T15:51:37.700 回答