Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


XPath predikat

Postades av 2006-12-07 08:05:36 - Martin Adrian, i forum xml, Tråden har 4 Kommentarer och lästs av 1661 personer

Går det att göra urval i xpath på en nodelista.

typ: ("in" finns inte som operator i XPath)

//a[@id in //b/@ref]

dvs välj a noder som har ett attribut id som finns i b nodernas ref attribut.

från följande xml får man de två första a noderna

<b ref="id1"/>
<b ref="id2"/>
<a id="id1"/>
<a id="id2/>
<a id="id3/>


Svara

Sv: XPath predikat

Postades av 2006-12-18 12:42:36 - Per Persson

Ett sätt:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="adrian.xsl" ?>
<root>
    <b ref="id1"/>
    <b ref="id2"/>
    <a id="id1"/>
    <a id="id2"/>
    <a id="id3"/>
</root>


<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    >

    <xsl:template match="/">
        <div>
            <p>Before</p>
            <xsl:for-each select="//a">
                <xsl:variable name="a-node" select="." />
                <xsl:variable name="a-id" select="@id" />
                <xsl:for-each select="//b">
                    <xsl:variable name="b-node" select="." />
                    <xsl:variable name="b-ref" select="@ref" />
                    <xsl:if test="$a-id = $b-ref">
                        <xsl:copy-of select="$a-node" />
                    </xsl:if>
                </xsl:for-each>
            </xsl:for-each>
            <p>After</p>
        </div>
    </xsl:template>
    
</xsl:stylesheet>


Svara

Sv: XPath predikat

Postades av 2006-12-18 14:31:20 - David Tellander

Ett annat sätt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	
	<xsl:template match="/">
		<root>
			<xsl:for-each select="//a[@id=//b/@ref]">
				<xsl:copy-of select="."/>
			</xsl:for-each>
		</root>
	</xsl:template>
	
</xsl:stylesheet>


Jag har alltså bara bytt ut 'in' i ditt uttryck med '='. Detta funkar eftersom om den ena operanden är ett node-set så jämförs värdet av varje nod i detta med den andra operanden och true returneras om det finns minst en nod som matchar (http://www.w3.org/TR/xpath#booleans).

En annan metod som kanske är att föredra är att använda en key:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:key name="referenced-ids" match="b/@ref" use="string(.)"/>
	<xsl:template match="/">
		<root>
			<xsl:for-each select="//a[@id=key('referenced-ids',@id)]">
				<xsl:copy-of select="."/>
			</xsl:for-each>
		</root>
	</xsl:template>	
</xsl:stylesheet>


Här gås b-elementen bara igenom en gång (när key:n skapas) istället för att som i det förra exemplet en gång för varje a-element, vilket borde vara bättre ur prestandasynpunkt. (En bra XSLT-processor klarar säkert av att optimera sådana fall, men man vet aldrig.)


Svara

Sv:XPath predikat

Postades av 2006-12-18 15:33:45 - Per Persson

Snyggt!


Svara

Sv: XPath predikat

Postades av 2007-03-08 09:29:24 - Rickard Robin

Och om man kollar på ursprungsfrågan, hur göra med ett Xpath expression ?


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
726
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies