XQuery loop conditions

Viewed 1994

I have a XML file that follows this DTD structure.

<!DOCTYPE report [
<!ELEMENT report (title,section+)>
<!ELEMENT section (title,body?,section*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT body (para+)>
<!ELEMENT para(#PCDATA)>
<!ATTLIST book version CDATA #REQUIRED>
<!ATTLIST section number ID CDATA #REQUIRED>
]>

And I want to query the following two things using XQuery.
1. Get all titles that appear at least twice (two sections with same title).

for $x in /report/section/
for $y in /report/section/
where $x/@title = $y/@title 
return $x/@title

2. Get the number and titles of all sections with at least 10 paragraphs in the body or 5 nested sections.

for $x in /report/section/
where $x/para >= 10 or count(/section) > 10
return <large>$x/number $x/title</large>

But my queries don't seem to be correct. I am a beginner with XQuery OR XPath, could someone tell me how to fix my queries?

Edit: Sample XML

<?xml version="1.0" encoding="UTF-8"?>
<report version = '1'>
    <title>Harry Potter</title>
    <section number = '1'>
        <title>sec1</title>
        <body>
            <para>1</para>
            <para>2</para>
            <para>3</para>
            <para>4</para>
            <para>5</para>
            <para>6</para>
            <para>7</para>
            <para>8</para>
            <para>9</para>
            <para>10</para>
            <para>11</para>         
        </body>         
    </section>

    <section number = '2'>
        <title>sec2</title>
        <body><para>test</para></body>
        <section number = '2.1'>
            <title>sec21</title>
            <body>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
                <para>test</para>
            </body>
        </section>
        <section number = '2.2'>
            <title>sec21</title>
            <body><para>test</para></body>
        </section>
        <section number = '2.3'>
            <title>sec23</title>
            <body><para>test</para></body>
        </section>
        <section number = '2.4'>
            <title>sec24</title>
            <body><para>test</para></body>
        </section>
        <section number = '2.5'>
            <title>sec25</title>
            <body><para>test</para></body>
        </section>
        <section number = '2.6'>
            <title>sec1</title>
            <body><para>test</para></body>
        </section>
    </section>      
</report>
2 Answers
Related