xml - BaseX 上的 Xpath/Xquery 没有返回任何结果

标签 xml xpath xquery basex

第一次尝试在 BaseX 中使用 XPath/Xquery,我有一个 opendata.gov 的集合/数据库,用于下面的 parking 场片段,

<?xml version="1.0" encoding="utf-8"?>
<CarParkDataImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://www.transportdirect.info/carparking B:/CODE/carparks/CarParking.xsd" xmlns="http://www.transportdirect.info/carparking">
<CarPark>
    <CarParkRef>3</CarParkRef>
    <CarParkName>Nunnery Lane</CarParkName>
    <Location>York</Location>
    <Address>Nunnery Lane--York--North Yorkshire</Address>
    <Postcode>YO23 1AA</Postcode>
</CarPark>

我想做的是找到某个地方的位置,在这个例子中是“Nunnery Lane”,然后返回 parking 场引用,所以我尝试了(数据库称为 Car_park_data,里面有 8 个文档)

collection("Car_park_data")/CarParkDataImport/CarPark[Location="Nunnery Lane"]/CarParkRef

然后试了一下flowr

for $x in collection("Car_park_data")/CarParkDataImport/CarPark
where $x/Location="Nunnery Lane"
order by $x/CarParkRef
return $x/CarParkRef

两者都没有返回任何结果..第一个查询的全部细节(basex 的结果位)

Compiling:
- pre-evaluating fn:collection("Car_park_data")
- adding text() step
- applying text index
Query:
collection("Car_park_data")/CarParkDataImport/CarPark[Location="Nunnery  Lane"]/CarParkRef
Optimized Query:
db:text("Car_park_data", "Nunnery  Lane")/parent::Location/parent::CarPark[parent::CarParkDataImport/parent::docume nt-node()]/CarParkRef
Result:
- Hit(s): 0 Items
- Updated: 0 Items
- Printed: 0 Bytes
- Read Locking: local [Car_park_data]
- Write Locking: none
Timing:
- Parsing: 1.33 ms
- Compiling: 0.54 ms
- Evaluating: 0.36 ms
- Printing: 0.28 ms
- Total Time: 2.52 ms
Query plan:
<QueryPlan>
<CachedPath>
 <ValueAccess data="Car_park_data" type="TEXT">
  <Str value="Nunnery Lane" type="xs:string"/>
 </ValueAccess>
 <IterStep axis="parent" test="Location"/>
  <IterStep axis="parent" test="CarPark">
  <CachedPath>
    <IterStep axis="parent" test="CarParkDataImport"/>
    <IterStep axis="parent" test="document-node()"/>
  </CachedPath>
   </IterStep>
   <IterStep axis="child" test="CarParkRef"/>
  </CachedPath>
</QueryPlan>

我做错了什么,正如我所说的使用 basex,您可以看到它是可行的 Xpat/Xquery,(即 basex 报告没有错误)但我猜我的 Xquery 有问题吗?

如果我用 BaseX 为“Nunnery Lane”做一个“查找”,这就是返回的结果

Query:
/descendant-or-self::*[text() contains text "Nunnery Lane"]
Result:
- Hit(s): 4 Items
- Updated: 0 Items
- Printed: 601 Bytes
- Read Locking: global
- Write Locking: global

然后我尝试将包含文本添加到我的查询中,添加到相同的 avale,没有命中

谢谢你的帮助

最佳答案

通过添加考虑命名空间

declare default element namespace "http://www.transportdirect.info/carparking";

参见 http://www.w3.org/TR/xquery/#id-default-namespace .

关于xml - BaseX 上的 Xpath/Xquery 没有返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590044/

相关文章:

xpath - 如何计算 XPath 或 XQuery 中的加权平均值?

xml - 从 xml 文档中查找 1-itemset, 2-itemset...n-itemset

c# - 如何获取XSL文件目录的绝对路径?

Java XML 节点长度

css - 多次出现时使用 xpath 完成文本验证

php - Selenium PHP 获取链接标签的 url

selenium - 顺序谓词和组合谓词之间的区别

c# - 如何在 Silverlight 中创建 XML 文档

xml - 创建按站点许可证(算法)

xpath - 如果 XQuery 包含给定关键字,则返回文本节点