tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von hela
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1367
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Bexx
    Bexx Bexx ist offline Programmer
    Registriert seit
    Feb 2009
    Ort
    Saarbrooklyn
    Beiträge
    222
    Hi nochmal,

    ich habe eine kleine Schwierigkeit gefunden im Umgang mit XSLT.
    Und zwar, ich habe 2 XML. Diese möchte ich beide über dasselbe XSLT manipulieren. Aus der 1. XML möchte ich eine bestimmte Knotenmenge mit copy-of kopieren, anschließend die 2. XML aufrufen und in einen bestimmten Knoten meine kopierte Knotenmenge aus der 1. XML einfügen. Nur leider kenne ich bislang nur Grundlagen in XSLT und weiß nicht wie der Aufruf syntaktisch lauten muss. Ich lese neben Tutorials, aber dazu habe ich leider bisher nichts gefunden. Speichere ich meine kopierte Knotenmenge zunächste in ein <xsl:variable> Tag oder kann ich das irgendwie direkt mit der document() Funktion?

    Danke im Voraus,
    die, die mal wieder Hilfe braucht
    Geändert von Bexx (21.09.11 um 13:58 Uhr)
     
    Christopher Columbus didn't need directions, neither do we!

    Alles hat eine Logik. Selbst wenn es keine Logik gibt.

    ***

    NetBeans 7.x, GlassFish v3
    JSF 2.0
    Java EE

  2. #2
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Hallo,

    verwende dazu die XPath-document()-Funktion.
    In den XSLT-FAQ gibt es dazu reichlich Beispele.
     

  3. #3
    Avatar von Bexx
    Bexx Bexx ist offline Programmer
    Registriert seit
    Feb 2009
    Ort
    Saarbrooklyn
    Beiträge
    222
    die Document Funktion kann ich ja anwenden, aber ich kenne die Syntax nicht, wie sie in XSLT sein muss, um zu meinem Ziel zu kommen - darin liegt mein Problem..
    Ich habe diese besagten zwei XML und meine Problematik ist einfach das ich keinen Anfang finde!

    SOURCE_XML beinhaltet mehrere Knotensets vom selben Typ NODEXY
    ich soll checken ob ein bestimmtes Childelement aller NODEXY Knoten
    übereinstimmt mit einem bestimmten Childelement von NODEXX im DESTINATION_XML.
    IF TRUE soll NODEXY mit allen Childs in die DESTINATION_XML in einen bestimmten Childnode von NODEXX kopieren.

    Das ist die Aufgabe. Ich stelle mich viell etwas dämlich an, aber ich weiß wirklich nicht wie ich ansetzen soll. Mir fehlt Zeit die Syntax jetzt noch schnell besser kennenzulernen wegen Abgabedruck und ich komm so gut wie nicht voran ich will ja keinen fertigen SOurceCode hier hingepostet bekommen, alles wonach ich frage ist eine Anleitung, damit ich mich Schritt für Schritt reinarbeiten kann...
    Geändert von Bexx (23.09.11 um 11:47 Uhr)
     
    Christopher Columbus didn't need directions, neither do we!

    Alles hat eine Logik. Selbst wenn es keine Logik gibt.

    ***

    NetBeans 7.x, GlassFish v3
    JSF 2.0
    Java EE

  4. #4
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Mach bitte mal ein Beispiel wie das erste und das zweite XML-Dokument aussehen könnte und wie das Ergebnis aussehen soll.
     

  5. #5
    Avatar von Bexx
    Bexx Bexx ist offline Programmer
    Registriert seit
    Feb 2009
    Ort
    Saarbrooklyn
    Beiträge
    222
    Beide Dateien haben in etwa den Aufbau und die ZielXML soll eigentlich so bleiben wie sie ist, mit Ausnahme der Knotensets die nach gefundener Übereinstimmung hinzugefügt werden sollen..

    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    
    <custom:ShipmentAssignmentDefinition>
        <data>
            <evenMoreData>
                <dta>
                 .
                 .
                 .
                 .
                </dta>
            </evenMoreData>
            <someMoreData>
                <daa> bla bla </daa>
                .
                .
                .
                .
                .
            </someMoreData>
            <somethingElse>
                <again>
                    .
                    .
                    <littleMore>
                        .
                        <DerAuszulesendeWert> blablubb </DerAuszulesendeWert>
                        .
                    </littleMore>
                </again>
                .
                .
                .
                .
            </somethingElse>
            .
            .
        </data>
        <data>
            <evenMoreData>
                <dta>
                 .
                 .
                 .
                 .
                </dta>
            </evenMoreData>
            <someMoreData>
                <daa> bla bla </daa>
                .
                .
                .
                .
                .
            </someMoreData>
            <somethingElse>
                <again>
                    .
                    .
                    <littleMore>
                        .
                        <DerAuszulesendeWert> blablubb </DerAuszulesendeWert>
                        .
                    </littleMore>
                </again>
                .
                .
                .
                .
            </somethingElse>
            .
            .
        </data> 
        <data>
            <evenMoreData>
                <dta>
                 .
                 .
                 .
                 .
                </dta>
            </evenMoreData>
            <someMoreData>
                <daa> bla bla </daa>
                .
                .
                .
                .
                .
            </someMoreData>
            <somethingElse>
                <again>
                    .
                    .
                    <littleMore>
                        .
                        <DerAuszulesendeWert> blablubb </DerAuszulesendeWert>
                        .
                    </littleMore>
                </again>
                .
                .
                .
                .
            </somethingElse>
            .
            .
        </data> 
    usw....
     
    Christopher Columbus didn't need directions, neither do we!

    Alles hat eine Logik. Selbst wenn es keine Logik gibt.

    ***

    NetBeans 7.x, GlassFish v3
    JSF 2.0
    Java EE

  6. #6
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Zitat Zitat von Bexx Beitrag anzeigen
    ...
    SOURCE_XML beinhaltet mehrere Knotensets vom selben Typ NODEXY
    ich soll checken ob ein bestimmtes Childelement aller NODEXY Knoten
    übereinstimmt mit einem bestimmten Childelement von NODEXX im DESTINATION_XML.
    IF TRUE soll NODEXY mit allen Childs in die DESTINATION_XML in einen bestimmten Childnode von NODEXX kopieren.
    ...
    Hallo,

    dein Beispiel ist ist weder wohlgeformt noch hilfreich. In deiner Aufgabenstellung ist dreimal das Adjektiv "bestimmte(s/n)" enthalten, für das man ebenso "irgendein" schreiben könnte. Abgesehen davon ist auch unklar, nach welchen Kriterien die Kindknoten "übereinstimmen" sollen. Hier eine triviale Lösung, aus der wenigstens hervorgehen soll wie die document()-Funktion verwendet werden kann.

    Die XML-Datei, die die Adressreferenz beider XML-Dokumente liefert und Quelle für die Transformation ist:
    Code xml:
    1
    2
    3
    4
    5
    
    <?xml version="1.0" encoding="UTF-8"?>
    <files>
        <file href="file1.xml"/>
        <file href="file2.xml"/>
    </files>
    Stylesheet:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:template match="/files">
        <xsl:variable name="nodes1" select="document(file[1]/@href)/node()" />
        <xsl:variable name="nodes2" select="document(file[2]/@href)/node()" />
     
        <result>
          <!-- Ausgabe aller Kindknoten der Elemente mit Namen "NODEXX" von "$nodes1",
             die selbst keine Kindknoten haben und mindestens einmal in $nodes2 als
             Kind des Elements "NODEXY" vorkommen. Verglichen wird nur der Elementinhalt,
             Namen der Kindknoten und Attribute sind beim Vergleich irrelevant. -->
          <xsl:copy-of select="$nodes1//NODEXX/*[self::* = $nodes2//NODEXY/* and not(*)]" />
        </result>
     
      </xsl:template>
     
    </xsl:stylesheet>
    ... ich will ja keinen fertigen SOurceCode hier hingepostet bekommen, alles wonach ich frage ist eine Anleitung, damit ich mich Schritt für Schritt reinarbeiten kann...
    Ich fand das XSLT-Kochbuch gut, vielleicht ist es auch was für dich. Hier ein Probekapitel, das sogar dein Problem tangiert.
    Bexx bedankt sich. 

  7. #7
    Avatar von Bexx
    Bexx Bexx ist offline Programmer
    Registriert seit
    Feb 2009
    Ort
    Saarbrooklyn
    Beiträge
    222
    Danke, ich weiß ich habs nicht einfacher gemacht mit meiner Erklärung, aber alles so abzuändern, dass ich es hier posten kann, wäre echt ne Schweinearbeit gewesen, tut mir leid.
    danke dir, dass du dir die Mühe für das Beispiel gemacht hast, es hilft bei dem ein oder anderen weiter jetzt
     
    Christopher Columbus didn't need directions, neither do we!

    Alles hat eine Logik. Selbst wenn es keine Logik gibt.

    ***

    NetBeans 7.x, GlassFish v3
    JSF 2.0
    Java EE

Ähnliche Themen

  1. Werte zweier Arrays vergleichen
    Von loddarmattheus im Forum PHP
    Antworten: 3
    Letzter Beitrag: 22.08.08, 10:41
  2. Werte zweier Felder vergleichen
    Von msycho im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 09.12.07, 15:03
  3. Vergleich zweier Werte mit: Min (a,b)
    Von Jai im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 21.11.05, 10:20
  4. Programm aufrufen und verarbeiten?
    Von Java/CppProgrammer im Forum Java
    Antworten: 12
    Letzter Beitrag: 04.10.05, 23:45
  5. [XSLT] 2 XML-Dokumente mit einer XSL Datei verarbeiten
    Von Zatic im Forum XML Technologien
    Antworten: 3
    Letzter Beitrag: 26.08.04, 15:17