[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] would like to simplify my XSLT


Subject: [xsl] would like to simplify my XSLT
From: Glen Mazza <grm7793@xxxxxxxxx>
Date: Mon, 29 Jan 2007 06:08:38 -0800 (PST)

The following XSLT 1.0 code *works*, but I think it
can be greatly simplified--I just don't know the
construct needed for the simplification.

Given an XML such as this:
<data>
<documents>
  <document id="1"/>
  <document id="2"/>
</documents>
<persons>
  <person>
        <name>Chris</name>
	<document relid="4"/>
	<document relid="7"/>
  </person>
  <person>
        <name>John</name>
	<document relid="2"/>
  </person>
</persons>
</data>

I want to list all people who *have* documents but do
*not* have at least one document that is in the
<documents> list.  For example, Chris above has no
documents in the <documents> list (relid=4 and 7
aren't there), so he would get listed, but John above
wouldn't, because his "2" is in the list.

This is what I've done (pseudocode, so might have
minor errors):

<xsl:for-each select="/persons/person">
<xsl:variable name="v_DocumentFound">
    <xsl:for-each select="document">
       <xsl:variable name="v_relid" select="@relid"/>
       <xsl:if test="count(/documents/document[@id =
$v_relid]) > 0">
           <xsl:text>(document found)</xsl:text>
       </xsl:if>
    </xsl:for-each>
</xsl:variable>
<xsl:if test="not(boolean(translate($v_DocumentFound,
' ', '')))">
      Document was not found for <xsl:value-of
select="name"/>
</xsl:if>
</xsl:for-each>

In other words, I stuff a variable named
$v_DocumentFound with text each time a document match
is found, then check whether the variable is empty to
see whether or not I need to report something.

Is this the right way of doing what I am trying to
accomplish--or is there a simpler method?  Mine seems
verbose, like I'm missing something obvious.

Thanks,
Glen



 
____________________________________________________________________________________
Food fight? Enjoy some healthy debate 
in the Yahoo! Answers Food & Drink Q&A.
http://answers.yahoo.com/dir/?link=list&sid=396545367


Current Thread
Keywords