You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Rita Greenberg <rg...@medata.com> on 2011/09/20 01:48:18 UTC
Understanding Following-Sibling
Hello.
Could somebody please explain the following code I found in a .fo file.
Here is my XML file.
<RCDATA>
<RCDATALINE>
<RC>ZE</RC>
<RCANSI>W1</RCANSI>
<TRC/>
<RCREDUCTION> 5878.14</RCREDUCTION>
<RCOVERRIDE/>
<RCMODIFIED/>
</RCDATALINE>
<RCDATALINE>
<RC>NR</RC>
<RCANSI>45</RCANSI>
<TRC/>
<RCREDUCTION> 0.00</RCREDUCTION>
<RCOVERRIDE/>
<RCMODIFIED/>
</RCDATALINE>
Here is the Following-sibling statement:
<xsl:if test="/doc/EOB/DETAIL/DETAILLINE/RCDATA/RCDATALINE/RC[.!='']/following-
sibling::*[.=''] and /doc/EOB/DETAIL/DETAILLINE/RCDATA/RCDATALINE/RC[.!
='']/following-sibling::*[.!='Y']">
My understanding of following-sibling::* is that the test is checking the
(first RC element and it it's not '' (empty) and the following siblings
(RCANSI, TRC, RCREDUCTION, RCOVERRIDE, RCMODIFIED) are = '' (empty))
AND
(first RC element and it it's not '' (empty) and the following siblings
(RCANSI, TRC, RCREDUCTION, RCOVERRIDE, RCMODIFIED) are not = 'Y'.
With the values above the condition is met and a block of code executed but I
don't understand how the first part of the test can be true since some of the
following-siblings are not = ''.
Thanks,
Rita
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org
Re: Understanding Following-Sibling
Posted by Rita Greenberg <rg...@medata.com>.
Sergiu Dumitriu <sergiu <at> xwiki.com> writes:
> So, the whole test checks that:
>
> - there are any RC nodes that have some text in them
> - and they have at least one following sibling that is empty (this is
> true for the TRC node)
>
> AND, distinctly:
>
> - there are any RC nodes that have some text in them (it doesn't have to
> be the same node as in the above condition)
> - and they have at least one following sibling that doesn't have Y as
> their content (and this is again true for every sibling node in your
> example)
Thanks Sergiu, for answering my question (when it should have been asked in the
XSLT forum). Your explanation was easy to follow and your "at least one
following sibling" allowed me to understand (finally!).
Rita
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org
Re: Understanding Following-Sibling
Posted by Sergiu Dumitriu <se...@xwiki.com>.
On 09/19/2011 07:48 PM, Rita Greenberg wrote:
> Hello.
>
> Could somebody please explain the following code I found in a .fo file.
>
> Here is my XML file.
> <RCDATA>
> <RCDATALINE>
> <RC>ZE</RC>
> <RCANSI>W1</RCANSI>
> <TRC/>
> <RCREDUCTION> 5878.14</RCREDUCTION>
> <RCOVERRIDE/>
> <RCMODIFIED/>
> </RCDATALINE>
> <RCDATALINE>
> <RC>NR</RC>
> <RCANSI>45</RCANSI>
> <TRC/>
> <RCREDUCTION> 0.00</RCREDUCTION>
> <RCOVERRIDE/>
> <RCMODIFIED/>
> </RCDATALINE>
>
> Here is the Following-sibling statement:
> <xsl:if test="/doc/EOB/DETAIL/DETAILLINE/RCDATA/RCDATALINE/RC[.!='']/following-
> sibling::*[.=''] and /doc/EOB/DETAIL/DETAILLINE/RCDATA/RCDATALINE/RC[.!
> ='']/following-sibling::*[.!='Y']">
>
> My understanding of following-sibling::* is that the test is checking the
> (first RC element and it it's not '' (empty) and the following siblings
> (RCANSI, TRC, RCREDUCTION, RCOVERRIDE, RCMODIFIED) are = '' (empty))
> AND
> (first RC element and it it's not '' (empty) and the following siblings
> (RCANSI, TRC, RCREDUCTION, RCOVERRIDE, RCMODIFIED) are not = 'Y'.
>
> With the values above the condition is met and a block of code executed but I
> don't understand how the first part of the test can be true since some of the
> following-siblings are not = ''.
First, this is not a question for the FOP list, since this is strictly
an XSLT (or rather XPath) question.
An xsl:if test doesn't check all the nodes, but the existence of _some_
nodes that pass the test.
A parent/descendant selector doesn't pick the first node of type
<descendant>, but one that does fit in the whole expression.
The following-sibling axis, as explained on
http://www.w3.org/TR/xpath/#axes , refers to all the nodes that are
children of the same parent and follow the current node.
So, the whole test checks that:
- there are any RC nodes that have some text in them
- and they have at least one following sibling that is empty (this is
true for the TRC node)
AND, distinctly:
- there are any RC nodes that have some text in them (it doesn't have to
be the same node as in the above condition)
- and they have at least one following sibling that doesn't have Y as
their content (and this is again true for every sibling node in your
example)
Overall, I think that the whole test is wrong, since it never tries to
relate to the context node. What you probably want is to put this
condition in a template that is already on the RCDATALINE, and continue
testing from that point on with ./RC instead of going from the root with
/doc/..
> Thanks,
> Rita
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org