This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: working with multiple inputs simultaneously


[Irene Hall]

> I am attempting to transform an XML file dependent on the content of a
> second XML file. It goes Ok until I am in a situation where I require to
do
> a nested for-each with the outside for-each being based on one XML input
> and the inside for-each based on the other XML input. I cannot get the
> inside loop to run as once inside the outside for-each there appears to be
> no recognition of the other XML document. I have combed  M Kay's "XSLT
> Reference" but it doesn't appear to cover anything remotely like this. Is
> this because it is impossible to do ?
>

It is possible, and not hard.  When you use xsl:for-each, the processor
changes the context so that the current node becomes the node you gave to
the xsl:for-each.  That is why your template is not recognizing the "other"
document.

You can make this work by creating a variable for each document:

<xsl:variable name='doc1' select='.'/>
<xsl:variable name='doc2' select='document("second-xml-file.xml")'/>

You can then do things within for-each loops like this:

<xsl:for-each select='$doc2'>
    <xsl:value-of select='$doc1/docname/@id'/>
   <!-- And so on...-->
</xsl:for-each>

If you do not want to use the entire tree of the first document, create a
variable for the part that you are interested and use it the same way.

Cheers,

Tom P



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]