Thread View: pl.comp.xml
4 messages
4 total messages
Started by Krzysiek
Thu, 21 Jun 2007 12:53
xslt intersection
Author: Krzysiek
Date: Thu, 21 Jun 2007 12:53
Date: Thu, 21 Jun 2007 12:53
50 lines
2120 bytes
2120 bytes
Witam.
Chciałem otrzymać te węzły B, które są wspólne dla obydwóch węzłów A.
Mam taki plik xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<doc>
<A>w elA1
<B>elB1</B>
<B>elB2</B>
<B>elB3</B>
</A>
<A>w elA2
<B>elB1</B>
<B>elB3</B>
<B>elB4</B>
</A>
</doc>
i taki plik transformacji:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<xsl:call-template name="aaa"/>
</xsl:template>
<xsl:template name="aaa">
<xsl:param name="node-set1" select="//A[1]/B"/>
<xsl:param name="node-set2" select="//A[2]/B"/>
A1: <xsl:apply-templates select="$node-set1"/>
A2: <xsl:apply-templates select="$node-set2"/>
Przecięcie <xsl:apply-templates select="$node-set1[count(. |
$node-set2) = count($node-set2)]"/>
</xsl:template>
<xsl:template match="B">
w B[ <xsl:value-of select="position()"/>
] </xsl:template>
</xsl:stylesheet>
A wynik jaki otrzymuję to:
A1: w B[ 1 ] w B[ 2 ] w B[ 3 ] A2: w B[ 1 ] w B[ 2 ] w B[ 3 ] Przecięcie
Jak widać nie udaje mi się znaleźć części wspólnej. Czy ktoś ma pomysł
gdzie popełniem błąd? Będę wdzięczny za każdą pomoc.
Krzysiek.
Re: xslt intersection
Author: szomiz
Date: Thu, 21 Jun 2007 13:40
Date: Thu, 21 Jun 2007 13:40
18 lines
1596 bytes
1596 bytes
Użytkownik "Krzysiek" <kawu1@fm.pl> napisał w wiadomości
news:f5dsko$jk4$1@atlantis.news.tpi.pl...
Strasznie przekombinowales...
<xsl:apply-templates select="A[1]/B" mode="comp"/>
<xs:template match="B" mode="comp">
<xsl:variable name="A2" select="../../A[2]/B[text()=current()/text()]"/>
<xsl:if test="count($A2)!=0">
<xsl:value-of select="."/>:
A[1]/B[<xsl:value-of select="count(preceding-sibling::A) +1"/>]
A[2]/B[<xsl:value-of select="count($A2/preceding-sibling::A) +1"/>],
...
Calosc przy zalozeniu, ze wewnatrz kazdego A wartosci w B sa unikalne.
sz.
Re: xslt intersection
Author: Krzysiek
Date: Fri, 22 Jun 2007 17:34
Date: Fri, 22 Jun 2007 17:34
25 lines
1850 bytes
1850 bytes
szomiz pisze: > U�ytkownik "Krzysiek" <kawu1@fm.pl> napisa� w wiadomo�ci > news:f5dsko$jk4$1@atlantis.news.tpi.pl... > > Strasznie przekombinowales... > > <xsl:apply-templates select="A[1]/B" mode="comp"/> > > <xs:template match="B" mode="comp"> > <xsl:variable name="A2" select="../../A[2]/B[text()=current()/text()]"/> > <xsl:if test="count($A2)!=0"> > <xsl:value-of select="."/>: > A[1]/B[<xsl:value-of select="count(preceding-sibling::A) +1"/>] > A[2]/B[<xsl:value-of select="count($A2/preceding-sibling::A) +1"/>], > ... > > Calosc przy zalozeniu, ze wewnatrz kazdego A wartosci w B sa unikalne. > > sz. > > Dzięki za pomoc. Oczywiście rozwiązanie jak najbardziej spełnia moje oczekiwania. A tak swoją drogą jestem ciekaw czemu w rozwiązanie które przedstawiłem nie działało (ten sposób na znalezienie części wspólnej zaczerpnąłem z książki).
Re: xslt intersection
Author: szomiz
Date: Sat, 23 Jun 2007 04:26
Date: Sat, 23 Jun 2007 04:26
16 lines
1546 bytes
1546 bytes
Użytkownik "Krzysiek" <kawu1@fm.pl> napisał w wiadomości news:f5h1nh$j5m$1@nemesis.news.tpi.pl... > oczekiwania. A tak swoją drogą jestem ciekaw czemu w rozwiązanie które > przedstawiłem nie działało (ten sposób na znalezienie części wspólnej select="$node-set1[count(. | $node-set2) = count($node-set2)]" Przy tak zdefiniowanych zmiennych nie zwroci niczego sensownego. Sprobuj sobie /opowiedziec/ to wyrazenie. > zaczerpnąłem z książki). Ale chyba nie w calosci. sz.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads