2017-08-04 140 views
0

我是新来的XPath我有节点,这将有属性的人让说.. 郎和nolang ....如何从属性中获取值(如果存在)或从Xpath中的其他属性获取值?

,这里是我的xml

<employee> 
<name>krishana</name> 
<speaks lang="kannada"></speaks> 
</employee> 

<employee> 
<name>alien</name> 
<speaks nolang="nolangauge"></speaks> 
</employee> 

我需要写的XPath这如果IF节点具有lang从lang获取值....否则,如果节点具有nolang从nolang获取值。

我能够从那些像* //员工的任何人都可以获取/说/ @郎或* //员工/说/ @ nolang我需要一个XPath表达式两个条件......

请帮助这个...

+0

你是指'// employee/speaks/@ * [name()=(“lang”,“nolang”)]'? – Andersson

+0

@Andersson你能用英文告诉我上面的XPath是什么吗? –

+0

从'speaks'节点返回名为''lang“'或''nolang''的属性的值 – Andersson

回答

1

假设你是在employee的背景下,你可以使用:

<xsl:value-of select="(speaks/@lang | speaks/@nolang)[1]" />   

得到第一个存在的两个属性的值。

+0

我不理解你的表达,它会让我从任何这些属性的价值..小孩说,我们有nolang,所以它会返回nolanguage,如果它有lang它将返回eng? –

+0

@GopiLal是的。如果这不能回答你的问题,那么请添加一个解释,说明你究竟需要什么(以及为什么),以及给出示例中的预期结果是什么。 –

+0

由于您不明白表达方式,我会尽力解释它。 '(speaks/@ lang | speaks/@ nolang)'尝试创建2个值的集合。第一个来自'lang'属性,第二个来自'nolang'属性。 我故意写* *试试*作为不存在的值将不会进入这个集合。 因此,如果例如当前'员工'元素没有'lang'属性 但是有'nolang',那么这个集合实际上只包含一个**项目 **。 现在看看最后的'[1]'。它指出,从刚刚创建的 集合**只有第一个**元素将被返回。就像你想要的一样。 –