【问题标题】:Difference between [border @ country] and [border /@ country][边界@国家]和[边界/@国家]之间的区别
【发布时间】:2015-06-04 06:10:36
【问题描述】:

我有一个xml文件,文件的一行是这样的

<mondial>
      <country>
         <encompassed continent="europe" percentage="100"/>
      </country>
</mondial>

假设我想选择包含大陆的国家是欧洲 所以我写了:

<result> {
 doc("mondial.xml")//country[encompassed @continent="europe"]//
city
 } </result>

但答案是这样的

<result> {
 doc("mondial.xml")//country[encompassed/ @continent="europe"]//
city
 } </result>

我想如果我们在这里使用“/”,我们会转到文件中的下一个目录 有人可以帮我吗?解释将不胜感激

【问题讨论】:

  • 您的两个 XPath 表达式在语法上都是无效的。
  • 不,第二个有效。也许你错过了它继续到第二行。
  • 您对“目录”和“文件”的讨论表明您非常困惑,并且您还没有完成任何有关 XML 或 XPath 的基本阅读,并且正在尝试通过试用来解决所有问题错误。这不是一个好的学习策略。
  • @Michael Kay 也许对 XPath 无效,对 XQuery 有效 –
  • @Win.ubuntu 不,不是。它在 XPath 中也有效,甚至是 XPath 1.0

标签: xml xpath xquery


【解决方案1】:

您拥有[encompassed @continent="europe"] 的第一个示例是无效的 XPath。

您的第二个示例是有效的,尽管我建议删除 [encompassed/ @continent="europe"] 中的空格,因为这很不寻常。

在您的第二个示例中,您试图在谓词之后找到 self-or-descendant city 元素,但是该元素在提供的 XML 中不存在。如果您的 XML 是正确的,那么只需将您的第二个查询更改为:

<result>{
    doc("mondial.xml")//country[encompassed/@continent = "europe"]
}</result>

您也可以考虑在此处使用eq 而不是=,因为您正在进行原子比较。但是,我会让您阅读相关内容。如果您刚刚开始使用 XQuery,那么 Priscialla Walmsley 的 XQuery 书是一个极好的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2014-05-15
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多