Options for looping through children with different element names

J

johkar

Assume XML parent element has lots of children that are all unique
element names. Is the only way to loop through them to use a wildcard
(*) for the element name in the for-each or apply-templates call? I
am looking for efficiency because I am going to have to do this many
times in the XSLT and there could be hundreds of child element names
for any given parent element. Note, I don't have control over the XML
tree structure.

Xpath: /category/businesstype/*

<category>
<businesstype>
<specialty>Some text</specialty>
<bigbox>Some text></bigbox>
<internetonly>Some text</internetonly>
...many many more nodes
</businesstype>
</category>

Any pointers appreciated.
 
M

Martin Honnen

johkar said:
Assume XML parent element has lots of children that are all unique
element names. Is the only way to loop through them to use a wildcard
(*) for the element name in the for-each or apply-templates call? I
am looking for efficiency because I am going to have to do this many
times in the XSLT and there could be hundreds of child element names
for any given parent element. Note, I don't have control over the XML
tree structure.

Xpath: /category/businesstype/*

<category>
<businesstype>
<specialty>Some text</specialty>
<bigbox>Some text></bigbox>
<internetonly>Some text</internetonly>
...many many more nodes
</businesstype>
</category>

I don't see any problem with using * if you want to process all element
child nodes.
If you prefer you can name each element (type) explicitly e.g. in 2.0
you can do
<xsl:template match="businesstype">
<xsl:apply-templates select="speciality, bigbox, internetonly"/>
</xsl:template>
or in 1.0 (and of course 2.0) you can do e.g.
<xsl:template match="businesstype">
<xsl:apply-templates select="speciality | bigbox | internetonly"/>
</xsl:template>
You would need to test which version performs better with the XSLT
processor of your choice.
 
J

johkar

I don't see any problem with using * if you want to process all element
child nodes.
If you prefer you can name each element (type) explicitly e.g. in 2.0
you can do
  <xsl:template match="businesstype">
   <xsl:apply-templates select="speciality, bigbox, internetonly"/>
  </xsl:template>
or in 1.0 (and of course 2.0) you can do e.g.
  <xsl:template match="businesstype">
   <xsl:apply-templates select="speciality | bigbox | internetonly"/>
  </xsl:template>
You would need to test which version performs better with the XSLT
processor of your choice.

--

        Martin Honnen
       http://JavaScript.FAQTs.com/- Hide quoted text -

- Show quoted text -

Thanks for confirming and the tips.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,830
Latest member
HeleneMull

Latest Threads

Top