[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] 2 Predicates in 1 for-each, possible?
Subject: RE: [xsl] 2 Predicates in 1 for-each, possible? From: "Bert" <arm@xxxxxxxxx> Date: Wed, 11 Feb 2004 08:09:00 +0100 |
Hi Josh, As you already noticed I'm still a novice on xslt. Thanks a lot for your kind explanation and solution. Kind regards, Bert -----Original Message----- From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Josh Canfield Sent: dinsdag 10 februari 2004 23:52 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: [xsl] 2 Predicates in 1 for-each, possible? A predicate is used to filter a selection by converting the contents to a boolean value. Your selection is //communication/email, which translates to /descendant-or-self::node()/communication/email. Alone this will return all email elements with a communication element as parent. Adding the predicate [emailaddress] specifies that you only want email nodes with an emailaddress node as a child. emailaddress will evaluate to true if there is an emailaddress child element of the selected node. the predicate [//communication2[emailaddress2]] evaluates to true when there exists a communication2 element with a child emailaddress2 element anywhere in the document. the predicate [emailaddress or //communication2[emailaddress2]] returns true when either of the two conditions described above are true. It looks like you really want the union of all communication/email and communication2/emailaddress2 nodes. <xsl:for-each select="//communication/email[emailaddress] | //communication2/emailaddress2"> Good luck, Josh -----Original Message----- From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Bert Sent: Tuesday, February 10, 2004 12:29 PM To: Xsl-List Subject: [xsl] 2 Predicates in 1 for-each, possible? Hello, Allow me to ask a question about 2 predicates in 1 for-each. I have this xml-file: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="persons01.xsl"?> <root> <organisation> <communication> <email> <emailaddress>e-mail@xxxxxxx(1)</emailaddress> </email> </communication> <communication2> <emailaddress2>e-mail@xxxxxxx(2)</emailaddress2> </communication2> </organisation> <organisation> <communication> <email> <emailaddress>e-mail@xxxxxx(1)</emailaddress> </email> </communication> <communication2> <emailaddress2>e-mail@xxxxxx(2)</emailaddress2> </communication2> </organisation> </root> I use this stylesheet to collect some information: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <document> <xsl:for-each select="//communication/email[emailaddress or //communication2[emailaddress2]]"> <xsl:sort select="."/> <xsl:value-of select="."/> <xsl:if test="position() != last()">, </xsl:if> </xsl:for-each> </document> </xsl:template> </xsl:stylesheet> I expected to get the following result: e-mail@xxxxxxx(1), e-mail@xxxxxxx(2), e-mail@xxxxxx(1), e-mail@xxxxxx(2) But what I get is this: e-mail@xxxxxxx(1) , e-mail@xxxxxx(1) It is obvious there is something wrong in my for-each-statement, but what? Any help is this is welcome. Kind regards, Bert XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] 2 Predicates in 1 for-eac, Josh Canfield | Thread | [xsl] Following-Sibling, Schreifels, Mark J. |
RE: [xsl] 2 Predicates in 1 for-eac, Bert | Date | [xsl] nodes or multiple runs?, Paul Tremblay |
Month |