XPath选择带谓词的多个元素

Ric*_*eld 11 xslt xpath

我有一个XPath查询正在做我想要的,即选择'surname'和'given-names'与给定谓词的联合(它实际上是或者我需要的,但联合工作正常):

/header/authors/surname[./text() and @id='1']
|
/header/authors/given-names[./text() and @id='1']
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说似乎过于冗长,我觉得应该可以做一些更简洁的事情,例如:

/header/authors/(surname|given-names)[./text() and @id='1']
Run Code Online (Sandbox Code Playgroud)

...但此版本无效XPath.

任何人都可以告诉我一个更简洁的方式来编写原始的XPath表达式,它不需要两次写入完整路径吗?

谢谢

理查德

小智 26

首先,这是有效的XPath 2.0:

/header/authors/(surname|given-names)[./text() and @id='1'] 
Run Code Online (Sandbox Code Playgroud)

二,这个XPath 1.0:

/header/authors/*[self::surname|self::given-names][text()][@id='1'] 
Run Code Online (Sandbox Code Playgroud)