【问题标题】:Get data from specific element从特定元素获取数据
【发布时间】:2017-05-04 23:46:48
【问题描述】:

我是 XML / Xquery 的新手,无法弄清楚这一点。 在下面提供的 XML 文档中,我试图找到所有写过同名书的作者,以及与该书相关的评级。我遇到的问题是,我的查询正在返回一位作者的所有评分,该作者可能拥有多本书以及正在寻找的那本书。

XML 文档:

<lib>
<author name="Sally J">
    <book>
        <name>ABC</name>
        <rating>6</rating>
    </book>
    <book>
        <name>Monsters</name>
        <rating>2</rating>
   </book>
    <book>
        <name>Spring Poems</name>
        <rating>5</rating>
   </book>
</author>
<author name="Samantha G">
    <book>
        <name>ABC</name>
        <rating>2</rating>
    </book>
    <book>
        <name>Cooking101</name>
        <rating>7</rating>
   </book>
    <book>
        <name>Aliens?</name>
        <rating>10</rating>
   </book>
</author>
</lib>

我的查询:

 for $x in doc("lib.xml")/lib/author
 where $x/book/name="ABC"
 return ($x/@name, $x/book/rating)

它输出的是:

莎莉·J

6

2

5

萨曼莎 G

2

7

10

当我只想为每个拥有“ABC”的作者评分时。我确信解决方案很简单,但我只是对 Xquery 中的工作原理缺乏具体的了解。

【问题讨论】:

    标签: xml xquery


    【解决方案1】:

    您的查询内容是: 对于每个作者,如果该作者的某本书的名称等于“ABC”,则返回该作者的姓名和该作者所有书籍的评级。这就是你所看到的。要记住的是 XPath 返回结果序列,因此 $x/book/rating 是 $x 的所有 book 子级的所有 rating 子级的集合。您想要的是名称等于“ABC”的书的评级,因此您也必须将条件放在那里:

    for $x in doc("lib.xml")/lib/author[book/name="ABC"] 
    return ($x/@name, $x/book[name="ABC"]/rating)
    

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2016-07-14
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多