xsl-list
[Top] [All Lists]

RE: processin each element not on a list

2002-10-06 10:02:59
Thanks. Basically everyone is saying to use a key. How do
you approach the problem if you have several sets of choices. 
Lets say one set of choices is {A,B,C,D} and the other set is 
{X,Y,Z}. Reformulating the source XML a bit, I would like to 
process all <item>'s that did not match their respective set 
of choices:

You can form a composite key:

<xsl:key name="c" match="choice" use="concat(../@id, '/', .)"/>

... select="item[not(key('c', concat(object/@id, '/', object))]"

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 


<root>
 <objects>
  <object id="1">
   <choices>
    <choice>A</choice>
    <choice>B</choice>
    <choice>C</choice>
    <choice>D</choice>
   </choices>
  </object>
  <object id="2">
   <choices>
    <choice>X</choice>
    <choice>Y</choice>
    <choice>Z</choice>
   </choices>
  </object>
 </objects>
 <items>
  <item id="1"><object id="1">A</object></item>
  <item id="2"><object id="1">X</object></item>
  <item id="3"><object id="2">W</object></item>
  <item id="4"><object id="1">D</object></item>
  <item id="5"><object id="2">B</object></item>
  <item id="6"><object id="2">Y</object></item>
 </item>
</root>

In other words, <item id="2"> should be processed
because its text value "X" is not among the list
of choices for <ojbect id="1">. Likewise, <item id="3"> 
and <item id="5"> should be processed because thier 
text values "W" and "B" are not among the list
of allowed choices.

Is it possible to do this in a generic fashion
with a *fixed* key definition or do I have to have
one key for each set of choices? What I am trying
to do is come up with a key definition and processing
that would accomodate *any* set of choices that
might be found in the source XML file. 

Thanks in advance.

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



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



<Prev in Thread] Current Thread [Next in Thread>