2016-04-14 19 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 

我曾嘗試使用級聯但是我得到了期望的錯誤項目,發現了順序。

我怎樣才能獲得每個項目的標題和年份,而循環它呢?

編輯:我試過這樣的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

順便說一句,編輯之前不需要進行「編輯:」編輯;這裏的文化偏好是爲了儘可能地閱讀和流動一個問題 - 任何想要了解編輯歷史的人都可以問StackOverflow並獲取一系列差異來展示它隨時間變化的情況。 –

回答

2

您可以使用XPath如下返回每個OtherTitleName元素的拼接與相應Year元素的旁邊,

//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

僅供參考 - 使用'{}'按鈕(或它創建的每行上的四個空格縮進)將塊標記爲代碼;這樣,與反引號不同,它有資格進行語法高亮顯示。 –

相關問題