tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Wanze003 Wanze003 ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    2
    Hallo zusammen,

    möchte aus folgender XML-Struktur Werte heraus lesen über XPATH. Das ganze funktioniert nur teilweise. Probleme machen die OR bzw. AND Operationen

    Code :
    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
    
     
    <Object>
        <ComponentList>
          <Component Name="_Article">
             <ClassName>MeineKlasse</ClassName>
             <Quantity>1.000000</Quantity>
             <OrderNumber>-1</OrderNumber>
             <ObjectNumber>2</ObjectNumber>
          </Component>
        <Component Name="_Article1">
             <ClassName>TestKlasse1</ClassName>
             <Quantity>1.000000</Quantity>
             <OrderNumber>-1</OrderNumber>
             <ObjectNumber>3</ObjectNumber>
         </Component>
        <Component Name="_Article2">
             <ClassName>Testklasse2</ClassName>
             <Quantity>1.000000</Quantity>
             <OrderNumber>6</OrderNumber>
             <ObjectNumber>3</ObjectNumber>
         </Component>
        <Component Name="_Article3">
             <ClassName>NeueKlasse</ClassName>
             <Quantity>1.000000</Quantity>
             <OrderNumber>6</OrderNumber>
             <ObjectNumber>3</ObjectNumber>
                     </Component>
        <Component Name="_Article4">
             <ClassName>NeueKlasse</ClassName>
             <Quantity>1.000000</Quantity>
             <OrderNumber>6</OrderNumber>
             <ObjectNumber>3</ObjectNumber>
                         <AssigndDeleteRule>1</AssigndDeleteRule>
        </Component>
        </ComponentList>
    <Object>

    -->
    In meinem Ergebnis möchte ich nur die Componenten, welche Ordernuber != -1 und die jeningen welche kein Kind Namens AssignDeleteRule haben.


    Mein XPATH sieht momentan so aus:
    (Nur eine von vielen Möglichkeiten die ich getesten habe.

    Code :
    1
    
    //child::*[self::Classname and self::ObjectNumber and self::OrderNumber != -1 and self::AssigndeleteRule != null]/child::text()
    Vielleicht ist das auch der komplett falsche Ansatz

    Die Liste die ich über XPATH raus lesen möchte sollte nachher so aussehen:

    Ergebnis:
    ClassName TestKlasse2
    Quantity 1.000000
    OrderNumber 6
    ObjectNumber 3
    ClassName NeueKlasse
    Quantity 1.000000
    OrderNumber 6
    ObjectNumber 3

    Für eine Hilfe wäre ich euch dankbar!

    Wanze003
     

  2. #2
    xml-looser xml-looser ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    21
    Da ich nicht deine XSLT Datei kenne mein Vorschlag

    Code :
    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
    
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="text" indent="yes"/>
        <xsl:variable name="lf">
            <xsl:text>
    </xsl:text>
        </xsl:variable>
     
        <xsl:template match="/">
            <xsl:apply-templates select="Object"/>
        </xsl:template>
        <xsl:template match="Object">
            <xsl:apply-templates select="ComponentList"/>
        </xsl:template>
        <xsl:template match="ComponentList">
            <xsl:apply-templates select="Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]"/>
        </xsl:template>
        <xsl:template match="Component">
     
            <xsl:text>ClassName  </xsl:text>
            <xsl:value-of select="ClassName"/>
            <xsl:value-of select="$lf"/>
            <xsl:text>Quantity  </xsl:text>
            <xsl:value-of select="Quantity"/>
            <xsl:value-of select="$lf"/>
            <xsl:text>OrderNumber  </xsl:text>
            <xsl:value-of select="OrderNumber"/>
            <xsl:value-of select="$lf"/>
            <xsl:text>ObjectNumber  </xsl:text>
            <xsl:value-of select="ObjectNumber"/>
            <xsl:value-of select="$lf"/>
        </xsl:template>
    </xsl:stylesheet>
     

  3. #3
    Wanze003 Wanze003 ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    2
    Danke mal für Deine schnelle Hilfe!
    jedoch nutze ich XSL gar nicht. Ich übergebe den XPATH einer Funktion die dann die ausgewählten Nodes zurück gibt, welche ich im XPATH definiere. Von daher ist mir die XPATH-Syntax an der Stelle wichtig. Ich habe jetzt gerade getestet das aus Deiner XSL als XPATH zu verwenden, will aber irgendwie nicht en.

    Hab jetzt folgendes als XPATH zusammen gebaut:

    Code :
    1
    
    /Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]/child::text()

    kriege so leider gar nichts zurück.
    Irgendwo ist hier der Wurm drin

    Gruß
    Wanze003
     

  4. #4
    xml-looser xml-looser ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    21
    mit welches Programm wird benutzt

    dann kann ich es verstehen.

    Probelm kann sein das es keine Node set ist
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von Wanze003 Beitrag anzeigen
    Hab jetzt folgendes als XPATH zusammen gebaut:

    Code :
    1
    
    /Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]/child::text()

    kriege so leider gar nichts zurück.
    Du darfst dort nicht child::text() anhängen. Du bekommst durch den Ausdruck
    Code :
    1
    
    /Object/ComponentList/Component[./OrderNumber!= -1 and not(AssigndDeleteRule)]
    schon das richtige Ergebnis, du mußt jetzt nur durch das Node-Set durchgehen und die gewünschten Informationen ausgeben.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Frage zu xpath in php5
    Von Inspector im Forum PHP
    Antworten: 4
    Letzter Beitrag: 27.01.08, 10:10
  2. Frage zu XSLT,XPath,XQuery
    Von WeirdAl im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 26.01.08, 18:14
  3. Newbie: Frage zu XPath
    Von Mysteryh81 im Forum XML Technologien
    Antworten: 1
    Letzter Beitrag: 17.07.07, 08:26
  4. Java XPath Problem (1.5 javax.xml.xpath.*)
    Von mad_dark_angel im Forum Java
    Antworten: 5
    Letzter Beitrag: 10.05.06, 14:39
  5. Antworten: 1
    Letzter Beitrag: 22.06.05, 16:27