Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Xquery检索XML中的子节点选择_Xml_Xpath_Xquery_Basex - Fatal编程技术网

使用Xquery检索XML中的子节点选择

使用Xquery检索XML中的子节点选择,xml,xpath,xquery,basex,Xml,Xpath,Xquery,Basex,我错过了一些东西,但不确定是什么。我使用BaseX和Http服务器将REST GET抛出到我在数据中输入的XML上,如下所示 <?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:

我错过了一些东西,但不确定是什么。我使用BaseX和Http服务器将REST GET抛出到我在数据中输入的XML上,如下所示

 <?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>
    <Notes>Open 24 hours. Park and pay by phone in this car park by calling 01904 279279. The location number for this car park is 7709. Blue badge holders can park free for as long as they want. CCTV &amp; toilets. Permit parking available.</Notes>
    <Telephone>01904551309</Telephone>
    <URL>http://www.york.gov.uk/transport/Parking/Car_parks/nunnery_ln/</URL>
</CarPark>
</CarParkDataImport>

所以我可以像运行RESTHTTP一样运行REST(根据我查询的内容,.xq会发生变化)

http://localhost:8984/rest?run=loc.xq&$a=York
这两种方法似乎都能起作用,并带回停车场下的所有节点,但如何带回一组节点?例如停车场名称、位置和邮政编码

我该如何选择节点?例如停车场名称、位置和邮政编码

然后不要返回
$b
中包含的所有内容,而只返回其中的一部分。以下查询仅返回与该位置匹配的停车场的
位置
停车场名称
邮政编码
元素

该查询适用于我的本地系统,否则,它与您的相同

(: XQuery file: loc.xq :)
declare default element namespace "http://www.transportdirect.info/carparking";
let $a := "York"
for $b in doc("carpark.xml")/CarParkDataImport/CarPark
where $b/Location = $a
return $b/(Location | CarParkName | Postcode)
将返回这三个节点,以及一些不需要的命名空间声明,但也不应妨碍它们

<?xml version="1.0" encoding="UTF-8"?>
<CarParkName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://www.transportdirect.info/carparking">Nunnery Lane</CarParkName>
<Location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.transportdirect.info/carparking">York</Location>
<Postcode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.transportdirect.info/carparking">YO23 1AA</Postcode

尼姑庵巷
约克

YO23 1谢谢,效果很好。在BaseX中,结果如前所述返回,并返回该位置的所有停车场,但当我在中发送REST http时,我收到以下错误消息。“第1列第2行错误:文档末尾有额外内容”,它只显示一个停车场名称,是否在BaseX中有日志,我可以检查到see发生了什么,因为我在XML本身中看不到任何东西?您可能需要将这些元素包装在根元素中。最简单的方法是将整个查询包装在元素构造函数中:
element results{let$a….}
@joemfb你是对的,这就是错误的原因。事实上,在我看来,一个文本根元素
比一个元素构造函数更清晰。@mathias和joemfb如果我可以通过互联网发送蛋糕,我可以,谢谢你,这确实会带回REST查询中的所有元素,但仍然会在en中得到一个包含额外内容的错误d的文件,但我认为这是另一个问题。
(: XQuery file: loc.xq :)
declare default element namespace "http://www.transportdirect.info/carparking";
let $a := "York"
for $b in doc("carpark.xml")/CarParkDataImport/CarPark
where $b/Location = $a
return $b/(Location | CarParkName | Postcode)
<?xml version="1.0" encoding="UTF-8"?>
<CarParkName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://www.transportdirect.info/carparking">Nunnery Lane</CarParkName>
<Location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.transportdirect.info/carparking">York</Location>
<Postcode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.transportdirect.info/carparking">YO23 1AA</Postcode
declare default element namespace "http://www.transportdirect.info/carparking";
let $a := "York"
for $b in doc("carpark.xml")/CarParkDataImport/CarPark
where $b/Location = $a
return
<root>
{$b/(Location | CarParkName | Postcode)}
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://www.transportdirect.info/carparking">
   <CarParkName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Nunnery Lane</CarParkName>
   <Location xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">York</Location>
   <Postcode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">YO23 1AA</Postcode>
</root