Как правильно использовать детей, как ссылки - PullRequest
1 голос
/ 18 мая 2019

У меня проблема с моим путем к XML-элементам.В XML-документе у меня есть:

 <team id="6">
        <refer>
            <team IDREF="7"/>
            <team IDREF="8"/>
        </refer>
    </team>
    <team id="7">
        <refer>
            <team IDREF="6"/>
            <team IDREF="8"/>
        </refer>
    </team>
    <team id="8">
        <refer>
            <team IDREF="6"/>
            <team IDREF="7"/>
        </refer>
    </team>

И я хочу действия -> нажмите ссылку для команды с id = 6, и печать ссылается на детей (два элемента -> 7 и 8).Я пробовал этот путь:

for $z in $path/team[@id = $path/team[@id=$id]/refer/team/@idref]

Где $ id - это идентификатор переменной из выбранной команды (например, $ id = 6), но это не работает.У меня есть пустой возврат с этого пути.Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Я описал это плохо.Я хотел вернуть целые элементы <team id="7">...</team> id и <team id="8">...</team> Я пробовал это ($ path is doc ("input.xml") / root):

для $ z в $ path / team [@id =$ path / team [@ id = $ id] / refer / team / @ idref]

Что плохого в этом пути?

EDIT2: XML-документ содержит только это:

<root>
 <team id="1">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="2"/>
     <team idref="3"/>
   </refer>
  </team>
 <team id="2">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="3"/>
   </refer>
  </team>
 <team id="3">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="1"/>
   </refer>
  </team>
</root>

И он должен вернуть мне целые

<team id="1">
       <ele1/>
       <ele2/>
       <refer>
         <team idref="2"/>
         <team idref="3"/>
       </refer>
      </team> 

с детскими элементами, когда $ id = 3.

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Я не могу воспроизвести вашу проблему, для второго примера, который вы разместили с запросом

declare variable $id external := 3;

/root/team[@id = /root/team[@id=$id]/refer/team/@idref]

в https://xqueryfiddle.liberty -development.net / gWcDMeu , где я просто правильно объявил переменную id и заменил использование $path в $path/team[@id = $path/team[@id=$id]/refer/team/@idref] на /root, чтобы разрешить использование в этом инструменте без загрузки внешнего ресурса выбранный результат равен

<team id="1">
   <ele1/>
   <ele2/>
   <refer>
     <team idref="2"/>
     <team idref="3"/>
   </refer>
  </team>

Так что, по крайней мере, один из ваших опубликованных примеров должен работать с одним из указанных вами путей. Если у вас все еще есть проблемы, вы можете отредактировать и показать один, минимальный и полный образец XML вместе с минимальным и полным XPath или XQuery, который позволяет нам воспроизвести проблему.

0 голосов
/ 19 мая 2019

Отредактированный ответ: Вы можете достичь желаемого результата с помощью следующего XQuery

let $file := doc("input.xml")/root,
    $id   := "1" return
for $z in $file/team[@id = $id] return $z

, который возвращает элемент team с $id=1.

...