Concept XML, XLST vorige-broer / zus, en voorouder

Ik ben erg nieuw voor xslt, en vond het kan eenvoudig of complex zijn.
Ik wil duidelijk maken sommige concepten.
Wat is vorige-broer /zus, en wat is voorouder, na het zoeken van google, ik gevonden voorouder uitleg. en de grafiek van de website maakt het makkelijker om te begrijpen.

Maar ik begrijp nog steeds niet voorafgaand aan-sibling

<product>
    <inventory>
        <drink>
            <lemonade>
                <price>$2.50</price>
                <amount>20</amount>
            </lemonade>
            <pop>
                <price>$1.50</price>
                <amount>10</amount>
            </pop>
        </drink>
          <service>
           <address />
            <phone />
            <delivery> City </delivery>
          </service>      
        <snack>
            <chips>
                <price>$4.50</price>
                <amount>60</amount>
            </chips>
        </snack>
        <hotfood></hotfood>
         <totalprice> $15</totleprice>

    </inventory>
</product>

dus hoe lees ik deze vorige-sibling::pop/voorouder::voorraden/totalprice

voorouder::voorraden/totalprice = product\inventaris\totalprice
vorige-sibling::pop – ik begrijp niet dat dit een
hoe om te lezen allemaal samen?

Veel dank

InformationsquelleAutor olo | 2012-09-10



3 Replies
  1. 70

    Het voorgaande-sibling:: as

    Het voorgaande-sibling:: as is de as van navigatie met de vorige verwant elementen om de focus element. Door “broer” bedoelen we een ander element dat dezelfde ouders naar de referentie-item. Door “vorige” bedoelen we een knooppunt dat ocurrs voordat de verwijzing één. De volgorde van de vorige-sibling-as is het omgekeerde het document bestelling. Neem een kijkje naar dit document:

    <fruit>
      <banana>
       <lady-finger-banana/>
      </banana> 
      <apple/>
      <pear/>
      <kiwi/>
    </fruit>

    Als de focus knooppunt peer, dan is de volgorde vorige-sibling::* is …

    1. apple
    2. banaan

    Opmerking: fruit, peer, lady-vinger-banaan en kiwi ‘ s zijn niet in de reeks.

    Dus de volgende voorwaarden is voldaan:

    1. vorige-sibling::*[ 1] is de apple
    2. vorige-sibling::*[ 2] is de banaan
    3. graaf( vorige-sibling::*) is 2
    4. vorige-sibling::apple[ 1] is ook de apple
    5. vorige-sibling::banana[ 1] is de banaan
    6. vorige-sibling::*[ 3] afwezig is of de lege reeks

    vorige-sibling::pop/voorouder::voorraden/totalprice Voorbeeld

    We hebben om te veranderen uw voorbeeld document nog een beetje nuttig onderzoek dit voorbeeld

    <product>
        <inventory>
            <drink>
                <lemonade>
                    <price>$2.50</price>
                    <amount>20</amount>
                </lemonade>
                <pop>
                    <price>$1.50</price>
                    <amount>10</amount>
                </pop>
                <focus-item />
             </drink>
            <totalprice>$15</totalprice>  
        </inventory>
    </product>

    Laat ons zeggen dat de focus ligt op de focus van het element-item.
    Om de uitdrukking vorige-sibling::pop/voorouder::voorraden/totalprice volg deze stappen

    1. vorige-sibling::pop selecteert alle voorgaande pop-elementen om de focus-item. Dit resulteert in een opeenvolging van een knooppunt.
    2. Voor elk item in de linker-reeks (slechts één pop element het gebeurt zo), stel dit onderdeel in als een tijdelijke focus item, en de uitdrukking van het recht van de /operator die …

      ancestor::inventory

      Er is slechts één zo ‘ n knooppunt, dat de voorouderlijke inventaris van het knooppunt. Dus de eerste /operator evalueert naar een opeenvolging van een inventaris van het knooppunt.

    3. Nu evalueren we het effect van de tweede en de rechter operand in expressie totale prijs. Voor elk item in de linker-reeks (slechts één inventaris knooppunt dus het gebeurt), stel dit als een tijdelijke focus item en evalueren totalprice.

    4. totalprice is de afkorting voor het kind::totalprice . Er is slechts één totaalprijs element op het kind as van de tijdelijke focus knooppunt, dus het uiteindelijke resultaat is een opeenvolging van een knooppunt, dat is de totale prijs van het knooppunt.

    Begrijpen Diagrammen

    Kijk op deze pagina voor een illustratie van axises.

    Hier is een kopie van die pagina ‘ s schema voor het voorgaande-sibling:: . In de referentie-node is Charlie en de node op het voorgaande-sibling:: de as is in het groen. Het is het enige knooppunt.
    Concept XML, XLST vorige-broer /zus, en voorouder

    • zeer duidelijk! bedankt
    • Als ik de focus op het element focus-item: parent::* zou me <drink>, ancestor::*zou me <drink>, <inventory>en <product>. Is dat correct? Beste groeten, Peter (+1 voor je mooie uitleg)
    • Ja, dat is juist.
    • Uitstekende uitleg.
  2. 3

    Assen handig voor navigatie door de node tree. Dus het hangt af van uw probleem wat voor soort van as is handig.

    De volgende stylesheet ziet u het verschil.

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
       <xsl:output method="xml" indent="yes"/>
    
       <xsl:template match="snack">
            <xsl:variable name="siblings" select="ancestor::node()"/>
            <debug>
            <xsl:for-each select="preceding-sibling::node()">
                    <sibling>
                            <xsl:value-of select="local-name()"/>
                    </sibling>
            </xsl:for-each>
            <xsl:for-each select="ancestor::node()">
                    <ancestor>
                            <xsl:value-of select="local-name()"/>
                    </ancestor>
            </xsl:for-each>
    
            </debug>
       </xsl:template>
    
       <xsl:template match="*">
             <xsl:apply-templates select="*"/>
       </xsl:template>
    </xsl:stylesheet>
    • mooi voorbeeld +1
  3. 2

    Vorige-broer of zus krijgt alle element broers en zussen die eraan voorafging in het huidige niveau van het knooppunt. Tenzij u een of meer van die vorige broers en zussen met een xpath-expressie. Als u een specifieke voorgaande-verwant met xpath het begint altijd met 1 vierkante haken.

    Voorouder is de eerste overeenkomende voorouder die overeenkomt met de expressie. Zo gaat een back-up van het knooppunt boom om te kijken naar een overeenkomstige expressie, afhankelijk van waar u zich op dat moment wijst. Dus als u op het product/voorraad/drinken/pop of gewoon /pop dan voorouder voorraad/totalprice ziet er gewoon voor de eerste vindplaats en moet alleen terug een pointer naar een punt aan dat de matching geval anders zal worden gericht aan niets en bent u nog steeds te wijzen op de pop.

    • Hartelijk dank voor uw antwoord. kon ik dan een beetje meer voorbeelden?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *