[XPATH] Hoe in dezelfde node te blijven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ik heb de volgende XML structuur :
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<WebShopXML>
    <Classifications>
        <Classification ID="12348759">
            <Parent ID=""/>
            <Synonyms>
            </Synonyms>
            <ClassificationName>Chemie</ClassificationName>
        </Classification>
    </Classifications>
    <ProductGroup ID="xxx">
        <ProductGroupClassification>
            <Classification Level="1" ID="12348759"/>
        </ProductGroupClassification>
        <Products>
            <ProductNumber>123</ProductNumber>
            <ProductNumber>456</ProductNumber>
        </Products>
    </ProductGroup>

Dus de classificaties zijn afgesplitst.

Ik doorloop de XML vanuit /WebShopXML/ProductGroup/Products/, dat is dus mijn beginnode.

Nu probeert ik met XPath de naam van de classificatie bij een ProductNumber te krijgen. Maar hoe doe ik dit?
Wat ik momenteel probeer is het volgende :
../../../Classifications/Classification[@ID=../ProductGroupClassification/Classification[@Level=1]/@ID]/ClassificationName/text()

Maar dat geeft geen resultaten.
Proefondervindelijk ben ik erachter gekomen dat het fout gaat in het stukje @ID= dan zit hij al in de Classification node, waarvandaan ik dus niet meer de huidige Classification ID kan terugvinden.

Wat doe ik verkeerd?
[offtopic]XML kloppend gemaakt in een edit[/quote]

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:15
Die ID is toch juist een attribuut (dus in XPath termen een child node over de attribute axis) dus dat is precies wat je wil? Het enige wat me onjuist lijkt is dat je relatieve pad naar die ProductGroupClassification niet klopt, want dat is helemaal geen sibling van Classification, dus waarschijnlijk dat je daarom geen match vindt.

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Gomez12 schreef op donderdag 09 december 2010 @ 16:03:
Ik doorloop de XML vanuit /WebShopXML/ProductGroup/Products/, dat is dus mijn beginnode.
Dit path is er niet :?
Nu probeert ik met XPath de naam van de classificatie bij een ProductNumber te krijgen. Maar hoe doe ik dit?
Wat ik momenteel probeer is het volgende :
../../../Classifications/Classification[@ID=../ProductGroupClassification/Classification[@Level=1]/@ID]/ClassificationName/text()
Vanuit waar gebruik je XPath? Kun je niet gewoon gebruik maken van een functie die dit ophaalt aan de hand van een id?.. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Soultaker schreef op donderdag 09 december 2010 @ 16:16:
Die ID is toch juist een attribuut (dus in XPath termen een child node over de attribute axis) dus dat is precies wat je wil? Het enige wat me onjuist lijkt is dat je relatieve pad naar die ProductGroupClassification niet klopt, want dat is helemaal geen sibling van Classification, dus waarschijnlijk dat je daarom geen match vindt.
Dat is juist het probleem, de ID die ik moet hebben is een sibling van Products.

Ik begin in Products, dan wil ik vanuit 3 nivo's lager de classificationname hebben die hoort bij de id die 1 nivo lager dan Products staat.

Simplistisch uitgeschreven :
1 : Loop door de Products heen ( niet getoond maar dat is dus het beginpunt )
2 : Zoek de classificatienaam ( die dus veel dieper staat ) die hoort bij de id die 1 nivo boven de Products staat.
Excuses, ik had een tikfoutje gemaakt in plakken naar voorbeeld. Nu aangepast.

[ Voor 11% gewijzigd door Gomez12 op 09-12-2010 16:25 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Doe dan dus gewoon 2 XPath-queries - 1 om de id op te halen, een ander om daarbij de naam te krijgen.. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
In de plugin waarin ik het nodig heb kan ik maar 1 xpath statement opgeven per item. En in principe heb ik enkel met 2 items een probleem, dus liever doe ik het binnen 1 xpath statement dan er een extra transformatie-stap voor te zetten.

Maar wat ik wil kan dus niet zoals ik het wil?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Hangt van de verdere context af. Als je een functie als xslt's current() kan gebruiken, dan is het een eitje.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1