Xquery для внутри для - PullRequest
       18

Xquery для внутри для

1 голос
/ 06 сентября 2011

Я пытаюсь получить html напрямую из sql запроса (TSQL, sql server 2008 r2).У меня есть следующий xml в одном из полей, мне нужно будет проанализировать ежедневное расписание по списку ul с заголовком темы, перечисленным только один раз, а не для каждой темы.Мне не разрешено изменять форму данных xml.

как мне изменить это предложение select, чтобы выполнить его?

select  Day1Schedule = T.Item.query
                                ('
                                    for $a in //Schedule/Day[@Number="1"]/Topic
                                    for $b in $a/Subject
                                               return 
                                        <ul>
                                        <li>
                                        <strong>
                                        {$a/Header/text()}
                                        </strong>
                                        </li>
                                        <li>
                                            {$b/text()}
                                        </li>
                                    </ul>
                                ')


<Schedule>
<Day Number="1">
    <Topic>
        <Header>Topic1</Header>
        <Subject>T1Subject1</Subject>
        <Subject>T1Subject2</Subject>
        <Subject>T1Subject3</Subject>
        <Subject>T1Subject4</Subject>
        <Subject>T1Subject5</Subject>
    </Topic>
    <Topic>
        <Header>Topic2</Header>
        <Subject>T2Subject1</Subject>
    </Topic>
    <Topic>
        <Header>Topic3</Header>
        <Subject>T3Subject1</Subject>
        <Subject>T3Subject2</Subject>
        <Subject>T3Subject3</Subject>
    </Topic>
</Day>
<Day Number="2">
    <Topic>
        <Header>Topic1</Header>
        <Subject>T1Subject1</Subject>
        <Subject>T1Subject2</Subject>
        <Subject>T1Subject3</Subject>
        <Subject>T1Subject4</Subject>
        <Subject>T1Subject5</Subject>
    </Topic>
    <Topic>
        <Header>Topic2</Header>
        <Subject>T2Subject1</Subject>
    </Topic>
    <Topic>
        <Header>Topic3</Header>
        <Subject>T3Subject1</Subject>
        <Subject>T3Subject2</Subject>
        <Subject>T3Subject3</Subject>
    </Topic>
</Day>
<Day Number="3">
    <Topic>
        <Header>Topic1</Header>
        <Subject>T1Subject1</Subject>
        <Subject>T1Subject2</Subject>
        <Subject>T1Subject3</Subject>
        <Subject>T1Subject4</Subject>
        <Subject>T1Subject5</Subject>
    </Topic>
    <Topic>
        <Header>Topic2</Header>
        <Subject>T2Subject1</Subject>
    </Topic>
    <Topic>
        <Header>Topic3</Header>
        <Subject>T3Subject1</Subject>
        <Subject>T3Subject2</Subject>
        <Subject>T3Subject3</Subject>
    </Topic>
</Day>
 </Schedule>

Спасибо за любые идеи?

1 Ответ

1 голос
/ 06 сентября 2011

Попробуйте что-то вроде этого:

for $a in //Schedule/Day[@Number="1"]/Topic
return <ul>
           <li><strong>{$a/Header/text()}</strong></li>
           {for $b in $a/Subject
           return <li>{$b/text()}</li>}
       </ul>

Возвращает заголовок ровно один раз для каждой темы.

...