Двойное добавление в Xquery - PullRequest
       14

Двойное добавление в Xquery

0 голосов
/ 27 августа 2010

Я хочу добавить значения некоторых тегов XML, а затем снова добавить результат.Но у меня возникают проблемы с добавлением результатов, поэтому у меня есть только один окончательный результат добавления.

Представьте, что у вас есть это:

<nodeA>
<nodeB>
 <item>1</item>
 <item>2</item>
 <yesno>blah</yesno>
</nodeB>
<nodeC>
 <thing>A</thing>
</nodeC>
</nodeA>

<nodeA>
<nodeB>
 <item>3</item>
 <item>4</item>
 <yesno>blah</yesno>
</nodeB>
<nodeC>
 <thing>B</thing>
</nodeC>
</nodeA>

Я хочу получить этот результат <result>A,1,2,B,3,4</result>Но я получаю это: <result>A,1,2</result><result>B,3,4</result>

Я читал это: XQuery: как правильно добавить цикл for , но все равно я не могу заставить его работать.Вот пример моего кода.

let $contador := count(
    for $x in $productDoc//*[substring(local-name(.),2,23)="nodeB"]
    where not(exists ($x/ns0:yesno))
    return
     $x)

 return
    if ($contador = 0) then
      <result> </result>
    else
      for $x in $productDoc//*[substring(local-name(.),2,18)="nodeB"]
      where not(exists ($x//ns0:yesno))
      return
          for $y in $x//*[matches(name(.),'thing')]
          let $z := $x//*[matches(name(.),'item')]
          return
            for $i in $y
            let $c := concat($i,",",string-join($z,","))
            return          
                let $d := string-join($c,",")
                <result>{ $d }</result>

Я предполагаю, что происходит то, что я добавляю частичные результаты неправильно ... или в неправильном месте, но я не знаю, где делатьЭто.Может быть, я должен вызвать эту функцию из другой, которая делает строковое соединение результата.Что ты думаешь?

1 Ответ

1 голос
/ 29 августа 2010

Следующий запрос возвращает именно то, что вам нужно (работает на предоставленном вами примере):

<result>{
string-join(
  for $nodeA in $productDoc//nodeA
  return ($nodeA//thing, $nodeA//item), ",")
}</result>

Укажите больше деталей в своем вопросе, если вам нужно что-то более конкретное.

...