XML-код повторяет результаты, как реализовать отличительные значения? - PullRequest
0 голосов
/ 27 марта 2019

пытается сравнить два столбца по их цене и коду издателя.Но результат дает мне вдвое больше ответов.Попытка использовать разные значения, чтобы не получать повторяющиеся результаты, но продолжаю получать синтаксические ошибки

Я использую BASEx9.2 для запуска моего XML-файла

<results>
  {
    for $e in doc("../henry/Book.xml")//Book,
        $p in doc("../henry/Book.xml")//Book
    where $e/PublisherCode = $p/PublisherCode and $e/Price = $p/Price
          and $e/Title != $p/Title
    return
        <Pair>"{ $e/Title }" - "{ $p/Title }"</Pair>
  }
</results>

Мой ожидаемый результат такой:

<results>
  <Pair>"<Title>The Stranger</Title>" - "<Title>The Fall</Title>"</Pair>
  <Pair>"<Title>The Edge</Title>" - "<Title>Slay Ride</Title>"</Pair>
  <Pair>"<Title>Beloved</Title>" - "<Title>Jazz</Title>"</Pair>
  <Pair>"<Title>Nine Stories</Title>" - "<Title>Franny and Zooey</Title>"</Pair>
  <Pair>"<Title>Nine Stories</Title>" - "<Title>The Catcher in the Rye</Title>"</Pair>
  <Pair>"<Title>Franny and Zooey</Title>" - "<Title>The Catcher in the Rye</Title>"</Pair>
</results>

мой текущий результат таков:

<results>
  <Pair>"<Title>The Stranger</Title>" - "<Title>The Fall</Title>"</Pair>
  <Pair>"<Title>The Edge</Title>" - "<Title>Slay Ride</Title>"</Pair>
  <Pair>"<Title>Beloved</Title>" - "<Title>Jazz</Title>"</Pair>
  <Pair>"<Title>Nine Stories</Title>" - "<Title>Franny and Zooey</Title>"</Pair>
  <Pair>"<Title>Nine Stories</Title>" - "<Title>The Catcher in the Rye</Title>"</Pair>
  <Pair>"<Title>Jazz</Title>" - "<Title>Beloved</Title>"</Pair>
  <Pair>"<Title>Franny and Zooey</Title>" - "<Title>Nine Stories</Title>"</Pair>
  <Pair>"<Title>Franny and Zooey</Title>" - "<Title>The Catcher in the Rye</Title>"</Pair>
  <Pair>"<Title>The Fall</Title>" - "<Title>The Stranger</Title>"</Pair>
  <Pair>"<Title>Slay Ride</Title>" - "<Title>The Edge</Title>"</Pair>
  <Pair>"<Title>The Catcher in the Rye</Title>" - "<Title>Nine Stories</Title>"</Pair>
  <Pair>"<Title>The Catcher in the Rye</Title>" - "<Title>Franny and Zooey</Title>"</Pair>
</results>

1 Ответ

0 голосов
/ 27 марта 2019

Я думаю, что вы сначала хотите сгруппировать книги по коду издателя и цене, например,

<Results>{
for $book in doc("../henry/Book.xml")//Book
group by $pubCode := $book/PublisherCode, $price := $book/Price
return 
  <group pubCode="{$pubCode}" price="{$price}">{$book/title}</group>
}</Result>

Затем вы хотите сформировать свои титульные пары для каждой группы, я думаю, используя функцию для этой помощи.

declare function local:pair($seq) {
  (
      if (exists(tail($seq)))
      then
          (tail($seq)!<Pair>"{ head($seq) }" - "{ . }"</Pair>,
           local:pair(tail($seq))
          )
       else ()
  )
};

так что с этим вы бы использовали

declare function local:pair($seq) {
  (
      if (exists(tail($seq)))
      then
          (tail($seq)!<Pair>"{ head($seq) }" - "{ . }"</Pair>,
           local:pair(tail($seq))
          )
       else ()
  )
};
<Results>{
for $book in doc("../henry/Book.xml")//Book
group by $pubCode := $book/PublisherCode, $price := $book/Price
return 
  local:pair($book/Title)
}</Result>
...