0

下面是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>

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

select name, capital from country

并得到了两行。对?如何使用 XQuery 来做到这一点?

4

3 回答 3

1

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

于 2012-07-06T13:14:59.393 回答
1

似乎你想要一个所有元素name的序列:capital

 /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>
于 2012-07-06T16:59:54.473 回答
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>您可以使用任何其他相关标签代替。

于 2012-07-07T04:43:40.167 回答