XQuery一次显示两个元素数据?

时间:2012-07-06 11:14:25

标签: xpath xquery

下面的

是xml文件 -

<Countries>
  <Country>
    <Name>India</Name>
    <Capital>New Delhi</Capital>
  </Country>
  <Country>
    <Name>USA</Name>
    <Capital>Washington DC</Capital>
  </Country>
  <Country>
    <Name>England</Name>
    <Capital>London</Capital>
  </Country>
  <Country>
    <Name>Japan</Name>
    <Capital>Tokyo</Capital>
  </Country>
  <Country>
    <Name>Srilanka</Name>
    <Capital>Colombo</Capital>
  </Country>
</Countries>

我已将其存储在BaseX(XMLDB)中。现在像普通数据库一样,如果我存储在那里,我会编写简单的select语句来从表中检索数据。例如:

select name, capital from country

并获得两行。对?如何使用XQuery完成?

3 个答案:

答案 0 :(得分:1)

在关系数据库(您以图形方式描述为“普通数据库”)中,每个查询都将表作为其输入,并生成一个表作为其输出。在XML数据库中,输入是XML,输出是XML。因此,您需要描述要生成的XML。完成后,您的问题的答案是肯定的:您当然可以编写一个XQuery来生成该输出。

答案 1 :(得分:1)

似乎您想要所有namecapital元素的序列:

 /Countries/Country/(Name|Capital)

此查询产生的结果是:

<Name>India</Name>
<Capital>New Delhi</Capital>
<Name>USA</Name>
<Capital>Washington DC</Capital>
<Name>England</Name>
<Capital>London</Capital>
<Name>Japan</Name>
<Capital>Tokyo</Capital>
<Name>Srilanka</Name>
<Capital>Colombo</Capital>

答案 2 :(得分:0)

如果您期望没有元素的输出,那么试试这个

for $x in doc("Country")/Countries/Country
  return string-join( ($x/Name, $x/Capital), " - ")

输出将是 -

`India - New Delhi USA - Washington DC England - London Japan - Tokyo Srilanka - Colombo`

如果你想要它们分开,那么这就是你必须使用的 -

for $x in doc("Country")/Countries/Country
  return <li>{string-join( ($x/Name, $x/Capital), " - ")}</li>

您可以使用任何其他相关标记代替<li>