Announcement

Collapse
No announcement yet.

copy or copy-of

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

  • #16
    Ja, das Beispiel oben ist die originale Datei. ich benutze Altova. Wenn ich also nicht das Attribut neu dahin schreibe, verschwindet es... Aber so klappt es jetzt auf jeden Fall.

    Vielen Dank Thomas!!

    Comment


    • #17
      Stimmt, die Alternative wäre das Kopieren des angefragten Attributs + Erzeugen des Zusatzattributs:
      Code:
      <xsl:template match="attribute::type[.='xs:string'][../attribute::name[.='uom']][ancestor::xs:element[contains(@name, '_a')]]">
        <xsl:copy-of select="."/>
        <xsl:attribute name="fixed">a</xsl:attribute>
      </xsl:template>

      Comment


      • #18
        Das ist natürlich viel eleganter!
        Besten Dank Thomas!!

        Comment


        • #19
          neues Problem

          Hallo!

          In meinem Code muss irgendwo ein Fehler liegen. Kann mir bitte jemand sagen wo und wie ich das besser mache?

          Code:
          <xsl:template match="attribute::type[.='xs:string'][../attribute::name[.='new_type']][ancestor::xs:element[contains(@name, '_section_')]]">
          		<xsl:copy-of select="."/>
          		<xsl:attribute name="fixed"><xsl:value-of select="concat('section-', substing-after(ancestor::xs:element/@name, '_section_'))"/></xsl:attribute>
          	</xsl:template>
          Was eigentlich geschehen soll ist Folgendes: Falls im Namen des "ancestor" ein bestimmtes Wort vorkommt, soll der "string" nach diesem Schlüsselwort zusammen mit dem Wort 'section-' ausgegeben werden.

          Vielen Dank im Voraus!

          Gruß
          Alex

          Comment


          • #20
            Die Abfrage nach [ancestor::xs:element[@name[contains(., '_section_')]]] erscheint mir aussichtsreicher.

            Comment


            • #21
              Ich glaube da würde beides funktionieren.

              Das Problem liegt wohl eher in der Zeile mit dem "substring-after"

              Was wäre da die Alternative?

              Comment


              • #22
                Liegt es evtl. am fehlenden "r" im geposteten Code ("substing-after")?

                Comment


                • #23
                  Oh Gott! Nein!!
                  Werde es sofort ausprobieren, ich Trottel...

                  Comment


                  • #24
                    wieder Neues...

                    Hallo!

                    Habe das nächste Problem entdeckt:

                    wie weit "nach oben" im "Baum" gilt dieses "ancestor"?
                    Code:
                    <xsl:template match="attribute::type[.='xs:string'][../attribute::name[.='uom']][ancestor::xs:element[contains(@name, '_a')]]">
                    ich meine wenn ich folgende Datei habe:
                    Code:
                    <xs:element name="auto">
                      <xs:element name="press_a">
                    	<xs:complexType>
                    	 	<xs:simpleContent>
                    			<xs:extension base="xs:float">
                    				<xs:attribute name="uom" type="xs:string" use="required"/>
                    				<xs:attribute name="tata" type="xs:string" use="required"/>
                    				<xs:attribute name="lala" type="xs:string" use="required"/>
                    				<xs:attribute name="new_type" type="xs:string" use="required"/>
                    			</xs:extension>
                    		</xs:simpleContent>
                    	</xs:complexType>
                      </xs:element>
                    </xs:element>
                    wie kann ich es vermeiden, dass das Element mit dem Namen "auto" "gesehen" und der Bedingung eventuell entspricht.

                    Was ich festgestellt habe, war Folgendes:
                    Im Beispiel oben musste das Wort "press" gar nicht in dem betreffen Element drin stehen, sondern konnte auch mindestens eine Ebene weiter "oben" sein.

                    Kann ich das irgendwie beschränken?

                    Vielen Dank!

                    Comment


                    • #25
                      zu dieser Sache hier:

                      Code:
                      <xsl:template match="attribute::type[.='xs:string'][../attribute::name[.='new_type']][ancestor::xs:element[contains(@name, '_section_')]]">
                      		<xsl:copy-of select="."/>
                      		<xsl:attribute name="fixed"><xsl:value-of select="concat('section-', substring-after(ancestor::xs:element/@name, '_section_'))"/></xsl:attribute>
                      	</xsl:template>
                      ich bekomme die fehlermeldung "...to many items..." oder so etwas in der Art. Ich schätze das Problem ist hier ähnlich wie eben schon beschrieben. Es wird beliebig weit nach "oben" in den "Baum" geschaut...

                      Comment


                      • #26
                        ancestor bezieht sich auf die Vorfahrenachse. Wenn diese zu allgemein ist, dann halt mittels ../../ usw. über die parent-Achse gehen (ggf. auch explizit parent::elementname).

                        Comment


                        • #27
                          so klappt es leider nicht...

                          wie gesagt, etwas läuft scheinbar falsch: obwohl es sich um das element "press_a" handelt, wird auch unter dem Elementen "auto" nachgeschaut. Und zwar scheinbar bei beiden.

                          Ich weiss, es hört sich ein wenig komisch an, aber so läuft es scheinbar bei mir... Oder spinne ich? :-)

                          Comment


                          • #28
                            Probiere es alternativ mit der Abfrage des letzten Vorfahrens eines Elementtyps, also ancestor::elementname[last()].

                            Comment

                            Working...
                            X