Announcement

Collapse
No announcement yet.

Nodesets nur auf Namen vergleichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nodesets nur auf Namen vergleichen

    hallo,
    ich habe 2 Nodesets :

    <data:me1>
    <a/>
    <b/>
    <c/>
    </data:me1>

    <data:me2>
    <a>Inhalt</a>
    <b></>
    <d></d>
    </data:me2>

    <xsl:variable name="me1" select="//data:me1/*"/>
    <xsl:variable name="me2" select="//data:me2/*"/>

    ich möchte die beiden Nodesets nur hinsichtlich ihrer Übereinstimmung bei ihren Node-Namen vergleichen und dabei herausfinden, ob die beiden Nodesets mindestens einen Nodenamen gemeinsam haben.

    Im obigen Beispiel wäre das der Knoten mit dem Namen "a". XSL erlaubt es zwar Nodesets miteinander zu vergleichen,
    (siehe Kay's Formel $p[count(. |$q) = count($q)])

    Ich habe jedoch keinerlei Ahnung wie ich das Problem:
    Nodesets nur auf ihren Namen hin zu vergleichen im Falle einer nicht leeren Schnittmenge true zurück zu bekommen.

    Hat irgend jemand eine Idee oder Vermutung in welche Richtung man hier überlegen muss? Das würde mich sehr freuen. Vielen Dank

    markus


    vergleichen.

  • #2
    Mit XSLT 2.0
    Code:
    <xsl:if test="$me1/node-name(.)[. = $me2/node-name(.)]">
    Mit XSLT 1.0 wirst du ein Template mit zwei Parametern schreiben müssen und dann Knoten für Knoten vergleichen müssen.
    Zuletzt editiert von Martin Honnen; 15.11.2010, 13:32.

    Comment


    • #3
      Falls du auf XSLT 1.0 angewiesen bist, dann könnte man auch statt der ersten Variable einen Schlüssel verwenden:
      Code:
      <xsl:key name="me1" match="data:me1/*" use="name()" />
      Damit lassen sich alle Elemente aus $me2 herausfiltern, deren Elementname auch in der Knotenmenge "me1" vorkommt:
      Code:
      select="$me2[count(key('me1',name())[1])=1]"
      Jetzt muss man diese Knotenmenge nur noch abzählen:
      Code:
      select="count($me2[count(key('me1',name())[1])=1])"
      Bei einer leeren Schnittmenge erhält man das Zählergebnis 0, ansonsten einen größeren Wert.

      Comment

      Working...
      X