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]
Other format: [Raw text]

Re: document() loops


Sorry if i am dragging it a bit too much,
but,
<xsl:for-each select="document(univ-xml[1])/university-records/univ-ids/univ">
<xsl:value-of select="position()"/>
<br/>
<xsl:value-of select="name"/>
<hr/>
</xsl:for-each>
works fine .. iterates through the nodes..and gets the data from the xml file at position1 ie., univ-xml1.. perfect!!
but when i try to iterate through other XML files WITHIN the above for-each, nothin shows up..
example.
<xsl:template match="univ-xml-list">
<first-xml>
<xsl:for-each select="document(univ-xml[1])/university-records/univ-ids/univ">
<xsl:element name= "univ{position()}">
<xsl:value-of select="name"/>
</xsl:element>
<xsl:if test= "position() = last()">
<second-xml>
<xsl:for-each select="document(univ-xml[2])/university-records/univ-ids/univ">
<!-- TO ITERATE THROUGH THE 2nd XML -->
<xsl:element name= "univ{position()}">
<xsl:value-of select="name"/>
</xsl:element>
</xsl:for-each>
</second-xml>
</xsl:if>
</xsl:for-each>
</first-xml>
</xsl:template>

I was expecting to get a result like..
<?xml version="1.0" encoding="UTF-16"?>
<first-xml>
<univ1>Kansas State University</univ1>
<univ2>Florida Atlantic University</univ2>
<univ3> Mississipi State University</univ3>
<univ4>Ohio State University</univ4>
<second-xml>
<univ1>Ohio State University</univ1>
<univ2>Wisconsin state University</univ2>
<univ3> Rensellar polytechnic Institute </univ3>
<univ4> Mississipi State University</univ4>
</second-xml>
</first-xml>

but what prints out is..
<first-xml>
<univ1>Kansas State University</univ1>
<univ2>Florida Atlantic University</univ2>
<univ3> Mississipi State University</univ3>
<univ4>Ohio State University</univ4>
<second-xml></second-xml>
</first-xml>

am i wrong anywhere ? if yes then what has to be done to get the result i was expecting.. this might probably lead me towards what i want..

thanks
From: David Carlisle <davidc@nag.co.uk>
Reply-To: xsl-list@lists.mulberrytech.com
To: xsl-list@lists.mulberrytech.com
CC: xsl-list@lists.mulberrytech.com
Subject: Re: [xsl] document() loops

your terminology does not fit well with that of XSLT so I am having to
guess what you mean. for-each iterates over the set of nodes supplied,
these can come from any number of files: you just have to select the
appropriate nodes.

Perhaps you would be better to apply-templates rather than do a for->each
if you want to traverse into the file structure.

But otherwise, as I think i said before, something like

<xsl:for-each select="univ-xml">
>stuff from <xsl:value-of select="."/>
 ><xsl:for-each select="document(.)/university-records/*">
>  iterate over all the children of university-records in this file...




From: "Laura Jenkins" <xsl_list@hotmail.com>
Reply-To: xsl-list@lists.mulberrytech.com
To: xsl-list@lists.mulberrytech.com
Subject: Re: [xsl] document() loops
Date: Fri, 13 Sep 2002 11:21:43 +0000

oh ic what u mean.. then in such a case , how do we run a for loop for an imported xml file???
for.example
if i get the locations from running a for-each to mainxml.xml
and get hold of the first univ-xml's name..
<xsl:for-each select="document(/univ-xml-list/univ-xml)">
<xsl:variable name = "external-xml" select ="document(.)"/>
</xsl:for-each>

Now is there a way to run a for-each for this external xml file??
so that i get hold of EACH ELEMENT in the External XML?? and get hold of their properties like name() position() etc??


From: David Carlisle <davidc@nag.co.uk>
Reply-To: xsl-list@lists.mulberrytech.com
To: xsl-list@lists.mulberrytech.com
CC: xsl-list@lists.mulberrytech.com
Subject: Re: [xsl] document() loops
Date: Fri, 13 Sep 2002 10:19:21 +0100

  <xsl:for-each select="document(/univ-xml-list/univ-xml[1])">
  <xsl:variable name = "element-name" select="name(.)"/>
  <xsl:element name="$element-name">


  </xsl:element>
  </xsl:for-each>
  this will create all the elements that are in the first elements..

No it won't as I said before that for-each is iterating over a single node
so it will only create one element, with name equal to teh name of teh
node selected in the xsl:for-each select=" however that node is a
document node, so has name "" so the xsl:eleemnt should generate an
error thatyou are trying to generate an element with an invalid name,
"".


David

_____________________________________________________________________
This message has been checked for all known viruses by Star Internet
delivered through the MessageLabs Virus Scanning Service. For further
information visit http://www.star.net.uk/stats.asp or alternatively call
Star Internet for details on the Virus Scanning Service.

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



_________________________________________________________________
Send and receive Hotmail on your mobile device: http://mobile.msn.com


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



_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com


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]