MudGuard: Funktion zum Testen, ob id in idrefs ist, gesucht

Beitrag lesen

Hi,

Ich verwende in einem xml für einige Elemente (namens event) das id-Attribut (ok, nix ungewöhnliches hier).
Für andere Elemente (namens participant) benutze ich ein Attribut vom Typ IDREFS, das dann eine Liste von id-Werten enthält.
Damit hab ich eine 1:n-Beziehung vom participant zu den events hergestellt.

Bei der XSL-Transformation will ich jetzt zu einem der Elemente mit IDREFS-Attribut alle referenzierten Elemente auflisten.
Bisher mach ich das so:

<data>
  <events>
     <event id="e01" name="bla"/>
     <event id="e02" name="blubb"/>
     <event id="e03" name="laber"/>
  </events>
  <participants>
    <participant events="e01,e03" name="Alpha"/>
    <participant events="e02" name="Bravo"/>
    <participant events="e02,e03" name="Charlie"/>
  </participants>
</data>

<xsl:template match="participant">
    <xsl:variable name="eventids" select="@eventrefs"/>
    <xsl:apply-templates select="//event[contains($eventids, @id)]"/>
</xsl:template>

event sind die Elemente, die die id-Attribute enthalten.
eventrefs ist das IDREFS Attribut.

3 Fragen dazu:
1.) geht das auch ohne Variable eventids?
Wenn ich <xsl:apply-templates select="//event[contains(./@eventrefs, @id)]"/> schreibe, bezieht sich das ./eventrefs doch auf das event, nicht auf den participant - oder täusche ich mich da?

2.) Gibt es eine fertige Funktion, die mir die Anzahl der ids in einem idref liefert?

3.) die wichtigste Frage: im Moment hab ich das so gelöst, daß die id-Werte mit einem Buchstaben beginnen und mit einer festen Anzahl von Ziffern aufhören.
Damit funktioniert die contains-Abfrage. Ok, damit kann ich in diesem Fall leben.
Aber: gibt es eine Funktion, die mir für beliebige id-Werte und ein idref-Attribut true oder false zurückliefert, je nachdem, ob die id nicht nur im Sinne der String-contains, sondern als echte ID im idrefs steckt?
Denn wenn ich die id-Werte ohne führende Nullen machen würde, also e1, e2, ... e10, e11, ... würde ja e1 mit contains auch gefunden werden, wenn das idrefs-Attribut "e10,e20" wäre.

Falls das eine Rolle spielt: ich verwende msxml 4.0 SDK und das msxsl-Commandline-Tool (gibt es was besseres nicht-Java-basiertes? Java braucht bei mir immer viel zu lange, um die VM zu starten)

Vielen Dank im Voraus

cu,
Andreas

--
MudGuard? Siehe http://www.Mud-Guard.de/
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.