2015-11-21 5 views
1
<results> 
{ 
    for $p in 
    (
    for $o in doc("mondial-3.0.xml") /mondial/organization 
    where fn:count($o/members) 
    order by fn:count($o/members) descending 
    return <organization> 
      <name> {$o/@name/string()} </name> 
      <abbreviation> {$o/@abbrev/string()} </abbreviation> 
      <num_members> {fn:count($o/members)} </num_members> 
      <members> {for $m in doc("mondial-3.0.xml") $o/members 
      return <country> {mondial/country[@id=$m/@country]/@name/string()} </country>} </members> 
     </organization> 
    )[position() < 10] 
    return $p 
} 
</results> 

Я не могу получить доступ к узлу-предку в этой проблеме, так как у меня есть идентификатор, хранящийся в параметре, и теперь я хочу совместить идентификатор этого параметра и получить имя параметра.Как получить доступ к узлу-предку в том же XQuery?

Я не получаю никакого результата для этого. Я не уверен, где я ошибаюсь.

XML FILE: -

Ссылка на файл XML является https://raw.githubusercontent.com/kroell/hsrm-mi-2semester-markuplanguage/master/Abgabe2/Aufgabe2/mondial-3.0.xml

+1

Я думаю, что пример XML, чтобы проверить XQuery против, может быть более полезным, чем ОТД в этой точке – har07

+0

я добавил ссылку на файл XML. – crash

ответ

0

В приведенной вами ссылке корневой элемент XML равен mondial, а не users, поэтому я бы использовал mondial в этом ответе. Обратите внимание на то, что член организации и страны связаны ID страны, так что вы можете сделать, как следовать, чтобы получить название страны каждого member элемента:

<f> 
{ 
    for $m in $o/members 
    return <g> {mondial/country[@id=$m/@country]/@name/string()} </g> 
} 
</f> 

Вот является полный рабочий запрос. Испытано в http://www.xpathtester.com/xquery с помощью XML по ссылке, публикуемую в вопросе в качестве входных данных:

<a> 
{ 
    for $p in 
    (
    for $o in /mondial/organization 
    where fn:count($o/members) 
    order by fn:count($o/members) descending 
    return <b> 
      <c> {$o/@name/string()} </c> 
      <d> {$o/@abbrev/string()} </d> 
      <e> {fn:count($o/members)} </e> 
      <f> {for $m in $o/members 
      return <g> {/mondial/country[@id=$m/@country]/@name/string()} </g>} </f> 
     </b> 

    )[position() < 10] 
    return $p 
} 
</a> 
+0

Это хорошо работает во всех тестерах или онлайн-редакторах, но вызывает ошибку для zorba. Сообщение об ошибке: «динамическая ошибка [err: XPDY0002]:« контекстный элемент »: необъявленная переменная« внутри содержимого crash

+0

@crash, возможно, вы просто забыли использовать 'doc (« mondial-3.0.xml »)' в своем фактическом XQuery , нет? – har07

+0

Я включил его. – crash

0

Вы не определяете желаемый результат вашего запроса, так что трудно сказать, почему ваш запрос не дает желаемого вывод; но в запросе есть несколько вещей, которые предполагают, что это совершенно неправильно.

Во-первых, $o всегда один <mem> элемент, поэтому fn:count($o) всегда равен 1, так что использование этого выражения в where и order by положений не может иметь никакого полезного эффекта.

Во-вторых, выражение, используемое для создания содержимого элемента <f>, выглядит неправильно, потому что оно никоим образом не зависит от значения $o.

+0

Да, у меня были допущенные ошибки. Я скорректировал код сейчас, но все же я не могу напечатать правильный контент . – crash

+1

Я не могу с этим поделать, поскольку я понятия не имею, что такое правильное значение ''. –

Смежные вопросы