2016-04-14 8 views
1

Привет У меня есть XML, который выглядит какКак получить каждый элемент в последовательности в Xquery?

<Movies> 
    <Movie> 
     <Title>$#*! My Dad Says</Title> 
     <Year>2010</Year> 
     <OtherTitles> 
      <OtherTitleName>Beep My Dad Says</OtherTitleName> 
      <Year>2010</Year> 
      <Country>USA</Country> 
      <TitleType>alternative title</TitleType> 
      <OtherTitleName>Shit My Dad Says</OtherTitleName> 
      <Year>2010</Year> 
      <Country>USA</Country> 
      <TitleType>uncensored intended title</TitleType> 
      <OtherTitleName>Shit! My Dad Says</OtherTitleName> 
      <Year>2013</Year> 
      <Country>Germany</Country> 
      <TitleType>imdb display title</TitleType> 
     </OtherTitles> 
    </Movie> 
</Movies> 

Я пытаюсь получить его OtherTitleName и год для каждого из фильма, чтобы показать его, как это -

 Beep My Dad Says, 2010 
     Shit! My Dad says, 2010 

Я пытался использовать конкатенацию но я получаю ожидаемый элемент ошибки, последовательность найдена.

Как я могу получить заголовок и год каждого элемента во время цикла?

EDIT: Я пробовал Xquery вот так.

for $n in Movies//Movie//OtherTitles 

     let $d := ($n/OtherTitleName/text(),$n/Year/text()) 

     return $d 
    // let $d := concat($n/OtherTitleName/text(),$n/Year/text()) Gives me error 
+0

Как вы в точности попытались? – har07

+0

BTW, нет необходимости ставить «EDIT:» перед редактированием; культурные предпочтения здесь - это вопрос для чтения и потока, а также - любой, кто хочет знать историю изменений, может попросить StackOverflow и получить ряд различий, показывающих, как он изменился с течением времени. –

ответ

2

Вы можете вернуть конкатенацию каждого OtherTitleName элемента с элементом соответствующий Year прямо рядом с ним с использованием XPath следующим образом:

//OtherTitleName/concat(.,following-sibling::Year[1]) 
1

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

let $OtherTitleName := $xml/Movie/OtherTitles/OtherTitleName/text() 
let $Year := $xml/Movie/OtherTitles/Year/text() 
for $each at $pos in $OtherTitleName 
return concat($each, ", ", $Year[$pos]) 
+0

Хорошая строка кода –

+1

FYI - используйте кнопку '{}' (или четырехмерный пробел в каждой строке, которую он создает), чтобы пометить блок как код; Таким образом, в отличие от backticks, он имеет право на подсветку синтаксиса. –