XQuery Geschachtelte For-Schleife

Habe ich eine Beispiel-xml-Datei wie :

<user_manual document-type="IU" ts-cover="Language Part alt" ts-lang="-" ts-multi="Language Part, Chapter" ts-overview="-" metadata1="9211" brand="Bosch" material-number="dummy_9000727237" vib="RW404960" language-codes="de, en" production-date="2012-12-03" layout-type="-" id="SL9761901">
<embed-language_part id="SL14686180">
<language_part id="ecls_bio_becls_a3_a14686169.SL9761756.7" role="-" lang="de">
<embed-user_manual_part id="ecls_bio_becls_a3_a14686169.SL14686446.10">
<?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a17144756"?> 
<user_manual_part id="ecls_bio_becls_a3_a17144756.SL9765760.11" role="-" document-type="IU">
<embed-chapter id="ecls_bio_becls_a3_a17144756.SL9762101.13">
<?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a30660983"?> 
<chapter id="ecls_bio_becls_a3_a30660983.SL2300626.14" role="-" toctitle="yes" footrowtitle="no" type="security">
<embed-title_module id="ecls_bio_becls_a3_a30660983.SL2361816.15">
<?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a611713"?> 
<title_module id="ecls_bio_becls_a3_a611713.SL873735.16" role="-">
<title id="ecls_bio_becls_a3_a611713.SL873736.17">Sicherheits- und Warnhinweise</title> 
</title_module>
<?ecls-end-embedded-resource resource="ecls_bio_becls_a3_a611713"?> 
</embed-title_module>
<embed-section id="ecls_bio_becls_a3_a30660983.SL10400094.18">
<?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a11752692"?>  
<section id="ecls_bio_becls_a3_a11752692.SL1742298.19" footrowtitle="no" role="-" toctitle="yes">
<?Pub Caret1?> 
<embed-title_module id="ecls_bio_becls_a3_a11752692.SL1742291.20">
<?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a16181733"?> 
<title_module id="ecls_bio_becls_a3_a16181733.SL984238.21" role="-">
<title id="ecls_bio_becls_a3_a16181733.SL984239.22">Bevor Sie das Gerat in Betrieb nehmen</title> 
<para id="ecls_bio_becls_a3_a16181733.SL984240.23">Lesen Sie Gebrauchs- und Montageanleitung aufmerksam durch! Sie enthalten wichtige Informationen �ber Aufstellen, Gebrauch und Wartung des Ger�tes.</para> 
<para id="ecls_bio_becls_a3_a16181733.SL984241.24">Der Hersteller haftet nicht, wenn Sie die Hinweise und Warnungen der Gebrauchsanleitung missachten. Bewahren Sie alle Unterlagen f�r sp�teren Gebrauch oder f�r Nachbesitzer auf.</para> 
</title_module>
<?ecls-end-embedded-resource resource="ecls_bio_becls_a3_a16181733"?> 
</embed-title_module>
</section>
<?Pub *0000000275?> 
<?ecls-end-embedded-resource resource="ecls_bio_becls_a3_a11752692"?> 
</embed-section>
</chapter>
</embed-chapter>
</user_manual_part>
</embed-user_manual_part>
</language_part>
</embed-language_part>
</user_manual>

Möchte ich die Verwendung der XQuery-Sprache, aber ich bin wirklich neu in diesem query language.

Die Infrastruktur, die ich brauche, ist dies : ich möchte die Kapitel und deren Abschnitte mit den Titeln, zum Beispiel:

Kapitel ist wie in dieser xml-Datei :

    <chapter id="ecls_bio_becls_a3_a30660983.SL2300626.14" role="-" toctitle="yes" footrowtitle="no" type="security">
    <embed-title_module id="ecls_bio_becls_a3_a30660983.SL2361816.15">
    <?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a611713"?> 
    <title_module id="ecls_bio_becls_a3_a611713.SL873735.16" role="-">
    <title id="ecls_bio_becls_a3_a611713.SL873736.17">Sicherheits- und Warnhinweise</title>
...

In diesem Beispiel Sicherheits - ind Warnhinweise ist der Titel des Kapitel-Elements. Kapitel viele Abschnitte und in unserem Beispiel Abschnitt Titel ist :

       <section id="ecls_bio_becls_a3_a11752692.SL1742298.19" footrowtitle="no" role="-" toctitle="yes">
        <?Pub Caret1?> 
        <embed-title_module id="ecls_bio_becls_a3_a11752692.SL1742291.20">
        <?ecls-start-embedded-resource resource="ecls_bio_becls_a3_a16181733"?> 
        <title_module id="ecls_bio_becls_a3_a16181733.SL984238.21" role="-">
        <title id="ecls_bio_becls_a3_a16181733.SL984239.22">Bevor Sie das Gerat in Betrieb nehmen</title> 
...

Bevor Sie das Gerat in Betrieb nehmen.

Die erwartete Struktur :

<chapter> title:"Chapter's title"
<section>title:"First section's title"</section>
<section>title:"Second section's title"</section>
</chapter>

Beispiel, dass Kapitel hat gerade einen Abschnitt, aber ich habe gerade konfiguriert wird, diese zu erreichen, eine Lösung von meiner Datei, ist es am meisten lesbar Konfiguration Schätze ich...

Ich habe versucht, aus xquery-Abfrage :

<chapter
    let $doc := doc("Test.xml")
    for $chapter in $doc/user_manual/embed-language_part/language_part/embed-user_manual_part/user_manual_part/embed-chapter/chapter
        let $chapter_title := $chapter/embed-title_module/title_module/title
        for $section in $chapter/embed-section/section
        return <chapter>title:{data($chapter_title)} <section> title:{data($section/embed-title_module/title_module/title)}</section></chapter>

mit zwei geschachtelten Schleifen, aber dieser code macht meine Struktur wie :

<chapter>title:"Chapter's title"<section>"First section's title"</section></chapter>
<chapter>title:"Chapter's title"<section>"Second section's title"</section></chapter>

War das problem, looping, aber wenn ich versuche zu Bearbeiten, code wie diesen :

let $doc := doc("assemble.xml")
    for $chapter in $doc/user_manual/embed-language_part/language_part/embed-user_manual_part/user_manual_part/embed-chapter/chapter
        let $chapter_title := $chapter/embed-title_module/title_module/title
        <chapter> title:{data($chapter_title)} {
        for $section in $chapter/embed-section/section
        return <section> title:{data($section/embed-title_module/title_module/title)}</section>
        }</chapter>

Ich will einfach nur, um den tag in der ersten Schleife diejenigen, danach werde ich Sie hinzufügen Abschnitt Elemente Abfragen. Aber der obige Befehl funktioniert nicht für meine Erwartung.

Also ich brauche Eure Vorschläge, um diese Struktur richtig. Vielen Dank im Voraus. Ich wünschte, ich war deutlich gesagt die situation für Euch alle. Der name der Datei ausgegangen, die als "assemble.xml".

  • Ich sehe nichts in deiner Abfrage, die versucht, die Gruppe durch die unterschiedlichen Werte. Könnten Sie etwas klar, was Sie wollen?
  • Im Allgemeinen müssen Sie entweder über die XQuery 3.0 group by Ausdruck, oder, wenn Sie mit einer älteren version der Sprache, eine distinct-values() filter.
  • ...aber im moment, ich buchstäblich nicht verstehen, was Sie erwarten. Mit so einen riesigen Dokument, dass es schwer zu Lesen, nicht helfen, entweder-wenn Sie konnten das Problem reproduzieren, mit einem 3-4-line-XML-Datei und der vergleichsweise verkürzten code, das wäre hilfreich, und in übereinstimmung mit stackoverflow.com/help/mcve
  • ...btw, docs.basex.org/wiki/XQuery_3.0#Group_By ist eine gute Referenz für die XQuery 3.0-syntax, und es gibt viele Fragen und Antworten bereits auf StackOverflow zeigt die distinct-values() Muster für ältere Versionen der Sprache; einen stackoverflow.com/questions/23745868/grouping-in-xquery
  • Sorry für die falschen Erklärungen, die nach der Bearbeitung der post, ich war über das Ende der Arbeitszeit und müssen laufen, um das shuttle so, ich vergaß zu Bearbeiten das Thema und meine Erwartungen.
InformationsquelleAutor Hayra | 2014-10-21
Schreibe einen Kommentar