使用另一个“多值”属性XML / XSL从节点获取属性

时间:2018-10-30 15:58:47

标签: html xml xslt

我不明白如何找到搜索“多值”属性的属性。

我会写一个W3school的例子

[链接:https://www.w3schools.com/xml/xpath_examples.asp]

<bookstore>
<book category="web">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

</bookstore>

例如,如何使用字符串<xsl:value-of "/bookstore/book[author = James McGovern]/title"/>搜索标题。

有人可以帮助我吗?我是刚开始使用XML和XSL。

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,请谨慎使用术语。在您的XML中,只有categorylang是属性。另一方面,author是一个元素。因此,您真正要问的是当多个子元素具有相同名称时如何匹配。

答案是完全按照您想做的去做,希望您只需要将作者姓名放在撇号中即可表明它是字符串文字

<xsl:value-of select="/bookstore/book[author = 'James McGovern']/title"/>

当您使用类似author = 'James McGovern'的表达式时,它将实际上检查所有author元素,如果至少有一个匹配项,则返回true。因此,即使“ James McGovern”是列出的最后一位作者,它仍将返回true。

((如果您想了解更多信息,可以在https://www.w3.org/TR/xpath-10/#booleans的W3C官方规范中阅读布尔表达式。特别地,这种情况由“ 如果要比较的对象是一个节点集,另一个是字符串,则当且仅当该节点集中存在一个节点,从而对节点和另一个节点的字符串值执行比较的结果时,比较才为真字符串为真“)