内部的Xquery

时间:2011-09-05 20:43:53

标签: tsql for-loop xquery

我正在尝试从sql查询直接获取html(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 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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>

每个主题只返回一次Header。