Announcement

Collapse
No announcement yet.

Daten kopieren und bearbeiten

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

  • Daten kopieren und bearbeiten

    Hallo brauch mal wieder eure Hilfe

    Ich hab eine XAML Datei, in der ich Änderungen vornehmen möchte.
    D.h. Alles soll bleiben wie es ist nur ein bestimmtes Element voll ein neues Attribut bekommen, oder evtl. auch gelöscht oder ein anderes Element z.B. ToggleButton werden. Den Code kann ich kopieren mit <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> hin, nur die Änderungen bekomm ich nicht hin.

    Hier mal ein verkürztes Beispiel, das Rote im zweiten Teil soll eingefügt werden:
    Code:
    <Window>
    	<StackPanel Name="range0" ...>
    		<WrapPanel Name="id189" ...>
          			<Button x:Name="id17" Content="Off" ... />
        		</WrapPanel>
    	</StackPanel>
    
    	<StackPanel Name="range1" ...>
    		<WrapPanel Name="id190" ...>
          			<Button x:Name="id18" Content="Tut" ... />
       		 </WrapPanel>
    	</StackPanel>
    </Window>
    Code:
    <Window>
    	<StackPanel Name="range0" ...>
    		<WrapPanel Name="id189" ...>
          			<Button x:Name="id17" Content="Off" ... />
        		</WrapPanel>
    	</StackPanel>
    
    	<StackPanel Name="range1" ...>
    		<WrapPanel Name="id190" ...>
          			<Button x:Name="id18" Content="Tut"  Background="red"... />
       		 </WrapPanel>
    	</StackPanel>
    </Window>
    Bitte ich brauch eure Hilfe, wie mach ich das mit XSLT ?

    Danke!

  • #2
    Identity-Ansatz mit separatem Template, bezogen auf das Button-Element mit Attribut Content="Tut":

    Code:
    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Button[@Content='Tut']">
      <xsl:copy>
        <xsl:attribute name="Background">
          <xsl:text>red</xsl:text>    
        </xsl:attribute>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    Falls (wie im Beispielcode) der x-Namensraum im XAML-Code fehlt, diesen noch deklarieren: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml".

    Comment


    • #3
      Hallo!

      Erstmal Danke für deine Antwort.

      Leider funktioniert es nicht, kopieren tut er, nur das neue Attribut wird nicht eingefügt. Woran kann das liegen?

      Comment


      • #4
        Wer ist "er", also welcher Prozessor wird verwendet?

        Ich erhalte mit Deinem Beispiel (inkl. xmlns:x="...") testweise unter Saxon-HE 9.2.0.5 , AltovaXML 2010 und MSXML jeweils die gewünschte Ausgabe <Button Background="red" x:Name="id18" Content="Tut"/>.

        Hier nochmal das komplette XSLT-Stylesheet:
        Code:
        <?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        
          <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        
          <xsl:template match="@* | node()">
            <xsl:copy>
              <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
          </xsl:template>
        
          <xsl:template match="Button[@Content='Tut']">
            <xsl:copy>
              <xsl:attribute name="Background">
                <xsl:text>red</xsl:text>    
              </xsl:attribute>
              <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
          </xsl:template>
        
        </xsl:stylesheet>

        Comment


        • #5
          Ok, also ich hab nicht viel Ahnung von XSLT, das mal vorweg

          Es ist so ich hab ein Java Programm geschrieben (JDOM), welches die .xaml und die .xsl Datei einliest. Die .xaml wird über SAXBuilder builder = new SAXBuilder();
          Document document = builder.build( xaml ); eingelesen.
          Wenn ich das richtig versteh wird der Saxon Prozessor verwendet. Oder? Ob das aber jetzt der Saxon-HE 9.2.0.5 von dem du geschrieben hast is, keine Ahung. Bisher hat alles funktioniert, nur das einfügen/bearbeiten beim kopieren nicht. Hab das Stylesheet von dir genau übernommen.

          Comment


          • #6
            Ok, mist.

            Hab es grad noch mal probiert. Also mit meinem tollen verkürzten Beispiel bekomm ich es jetzt auch hin. Nur die eigentliche Datei damit geht es nicht. Versteh ich nicht.

            Schick die Datei mal mit, vielleicht sieht jemand meinen Fehler.
            (In dem Beispiel soll z.B. der ToggleButton mit dem Content="Off" das Attribut Background ="red" bekommen)

            (zum Hochladen musste ich das Suffix von .xaml in .txt ändern)
            Attached Files

            Comment


            • #7
              Hallo, schon wieder ich

              Hab jetzt rausgefunden, dass es nicht geht, wenn der Namespace

              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

              in der xaml Datei steht. Den Namespace benötige ich aber für die Darstellung. Was kann ich da jetzt machen?

              Versteh nicht warum der die Änderungen verhindert.

              Comment


              • #8
                Ok, hab das Problem gelöst.

                Vielen Danke für deine Mühe Thomas

                Comment

                Working...
                X