Paul Brunner: T & XPath: Attribut mit bestimmten Inhalt adessieren

Hallo,

ich stehe auf dem Schlauch...

Wie kann ich ein Attribut beliebigen Namens mit einem bestimmten Inhalt adressieren?

<xsl:apply-template select='element/@*[.="wert"]'> oder
<xsl:apply-template select='element[@*="wert"]/@*'> geht nicht!

Gruß
Paul

  1. Hi Paul,

    ich habe das gefunden:
    attribute::* selects all the attributes of the context node
    <attribute><all/></attribute>

    Fundstelle:
    http://www.biglist.com/lists/xsl-list/archives/199908/msg00446.html

    Vielleicht hilft dir das ja irgendwie weiter oder vielleicht
    hilft wenigstens der Link.

    Gruß Mia

  2. Hallo,

    Wie kann ich ein Attribut beliebigen Namens mit einem bestimmten Inhalt adressieren?

    Die Frage ist ob dein(e) Template(s) für die Arrtibute greift bzw. greifen.

    <xsl:apply-template select='element/@*[.="wert"]'>

    <xsl:apply-template select="element//@*[. = 'wert']">

    <nicht_so _wichtig>
    "Normalerweise" nützt man die Anführungszeichen umgekehrt.
    </nicht_so _wichtig>

    Grüße
    Thomas

    1. Die Frage ist ob dein(e) Template(s) für die Arrtibute greift bzw. greifen.

      Meinte natürlich: Attribute

      Thomas

    2. Hallo,

      Die Frage ist ob dein(e) Template(s) für die Attribute greift bzw. greifen.

      <xsl:apply-template select='element/@*[.="wert"]'>

      XML-Auszug:
      <entry myBodyTemplate="body" myTailTemplate="tail"/>

      XSL-Auszug:

      So werden wie erwartet beide Attribut-Templates aufgerufen...
      <xsl:apply-template select='entry/@*'>

      So wir keines mehr aufgerufen...
      <xsl:apply-template select='entry/@*[.="body"]'>

      <nicht_so _wichtig>
      "Normalerweise" nützt man die Anführungszeichen umgekehrt.
      </nicht_so _wichtig>

      Interessant, nur Konvention oder hat es einen bestimmten Grund?

      Gruß
      Paul

  3. Hallo Thomas,

    Der Vollständigkeit halber...

    <xsl:apply-template select='element/@*[.="wert"]'>
    <xsl:apply-template select='element[@*="wert"]/@*'>

    beides geht, wenn man das Drumherum richtig aufsetzt ;-)
    Fehler zwei Templates weiter vorne gefunden und beseitigt.

    Wie war das jetzt mit den einfachen und doppelten Anführungszeichen?

    Gruß
    Paul

    1. Hi,

      <xsl:apply-template select='element/@*[.="wert"]'>

      Das hier selektiert exakt die Attribute, die "wert" als value haben.

      <xsl:apply-template select='element[@*="wert"]/@*'>

      Das hier selektiert ALLE Attribute eines Elements, von denen mindestens eines den value "wert" hat.

      Bei <elem x="wert" y="bla"/>
      wird im ersten Fall nur x ausgewählt, im zweiten Fall x und y.

      beides geht,

      ja, aber mit unterschiedlicher Auswirkung.

      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.
    2. Hallo,

      Fehler zwei Templates weiter vorne gefunden und beseitigt.

      Ich habe das doch extra gefragt!

      Wie war das jetzt mit den einfachen und doppelten Anführungszeichen?

      Die SGML-Spez sieht folgendes für Attribute vor:
      Zeichen    Name           Bed.
        =         VI      Value Indicator
        "         LIT     Literal Delimiter
        '         LITA    Literal Delimiter (Alternaiv)

      Und sagt: "The value of an attribute consists of data characters and entity references, bounded by delimiters called "literal delimiters" (lit), which are normally quotation marks ("). Alternative literal delimiters (lita), normally apostrophes ('), can also be used, but the two types cannot be paired with one another."

      Diese "delimiters" sind in der General Delimiter Set auch so festgehalten.

      Die XML-Spez. ändert daran auch nichts:
      [10]    AttValue    ::=    '"' ([^<&"] | Reference)* '"'
         |  "'" ([^<&'] | Reference)* "'"

      D.h. du kannst es so nützen wie du es gemacht hast, da aber das (') als alternativ angesehen wird, nützt man - wie gesat: normalerweise - das (") als Attributwertbegrenzer.

      Grüße
      Thomas

      1. Hallo

        Fehler zwei Templates weiter vorne gefunden und beseitigt.
        Ich habe das doch extra gefragt!

        Schuldig des nachlaessigen debuggens...

        D.h. du kannst es so nützen wie du es gemacht hast, da aber das (') als alternativ angesehen wird, nützt man - wie gesat: normalerweise - das (") als Attributwertbegrenzer.

        Danke, wieder was gelernt.

        Gruss
        Paul