Welcome to WebmasterWorld Guest from

Forum Moderators: open

Message Too Old, No Replies

if not contains check against list

1:24 am on Dec 9, 2008 (gmt 0)

New User

10+ Year Member

joined:Dec 9, 2008
posts: 3
votes: 0

Hi, need an xml guru's help....
Am trying to write an xsl stylesheet that will take a dynamically created xml file and output a list of free workstations.

The xml file has the following structure,
<logged in>

The xml file outputs anything between 1 and 30 odd <software> nodes every three minutes with individual static ip addresses dependent on whether the workstation at that ip has had recent activity.

I want to query this xml file and check against a known list of ip addresses with the xsl file and output a new html list of ip's that represent free workstations.

I have managed to sort of do this by writing the following

<xsl: if test="not(contains(ip,'172.AA.AA.AAA'))">workstation A free</xsl: if>

except it runs down the entire <loggedin> list and checks each ip and outputs the text,

so if there were 9 <software> nodes, it writes "workstation A free" 9 times....

I need to write something that checks the <loggedin> tree and queries

...if within this list there is no instance of ip 'x' output this text 'yyy'

and repeats this query for all of the known workstations ip's so I get a single list of free stations.

Any ideas?

4:15 pm on Dec 9, 2008 (gmt 0)

Senior Member from CA 

WebmasterWorld Senior Member httpwebwitch is a WebmasterWorld Top Contributor of All Time 10+ Year Member

joined:Aug 29, 2003
votes: 0

Welcome to WebmasterWorld, alst!

This seems to me like a poor candidate for XSLT

you could do the same thing much more easily using a server-side script to parse the XML into an array of IPs, then compare that array against another array of known IP addresses.

array A = parsed from XML
array B = your list of known IPs
for each B as B[i],
- if B[i] is not in A,
- - add B[i] to array C
output C

Then if you like you can output the results as XML for transformation into your HTML. Or just have your script output HTML instead.

Doing it that way is more efficient and scalable... easier to maintain, too. your CPU will thank you

9:29 pm on Dec 9, 2008 (gmt 0)

New User

10+ Year Member

joined:Dec 9, 2008
posts: 3
votes: 0

fair enough, however server side arrays are a bit beyond me at the moment.

all of the xsl processing is being done on reasonably high end machines and is not a constantly refreshing process,

found using keys worked to do it in xsl,

see below.

thanks again,


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
<xsl:key match="/loggedin/software/ip" use="text()" name="list"/>
<xsl:template match="/">

<xsl:if test="string-length(key('list','172.xx.xx.xx'))=0">