AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Knoten filtern über Checkboxen in XML Datei
Thema durchsuchen
Ansicht
Themen-Optionen

Knoten filtern über Checkboxen in XML Datei

Ein Thema von Luckie · begonnen am 4. Mai 2006 · letzter Beitrag vom 5. Mai 2006
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Knoten filtern über Checkboxen in XML Datei

  Alt 4. Mai 2006, 10:05
Ich habe eine XML Datei und dazu passend eine xsl Datei. In der XML Datei wird eine Tabelle dargestellt:
Code:
Kategorie | Zeitstempel | Text
Kategorien sind: Info, Debug, Task, Warning und Error.

Könnte man jetzt irgendwie Checkboxen einfügen, so dass man sich aussuchen kann, welche Kategorien angezeigt werden sollen? Wichtig: es muss ohne irgendwelche serverseitigen Web-Sprachen gehen, da das Programm lokal auf einem Rechner läuft und die Datei lokal betrachtet wird.

Ich habe die Dateien mal angehangen.
Angehängte Dateien
Dateityp: txt logfile_155.txt (2,6 KB, 26x aufgerufen)
Dateityp: xml logfile_150.xml (28,0 KB, 28x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 4. Mai 2006, 11:39
Hallo Michael,

du machst es dir leichter, wenn du in deinem XSL-T Script ein paar Änderungen machst:

Dein CSS-Skript kannst du extern speichern:

XML-Code:
...
<head>
  <link rel="stylesheet" type="text/css" href="logfile.css"/>
  <title>...
Das Filter-Template würde ich so schreiben:

XML-Code:

<xsl:template name="luckie">
Jetzt kannst du über den Namen darauf zugreifen und die Filter vor der Verwendung einspeisen:

Delphi-Quellcode:
procedure TDemoForm.DemoButtonClick(Sender: TObject);
var
  s: TStrings;
  dir, fnDocument, fnStyle: TFileName;
begin
  dir := 'c:\daten\dp\luckie\';
  fnDocument := dir + 'logfile.xml';
  fnStyle := ChangeFileExt(fnDocument, '.xsl');
  s := TStringList.Create;
  xmlDoc.load(fnDocument);
  xmlStyle.load(fnStyle);

  s.Add('Start');
  s.Add('Ende');
  s.Delimiter := '|';

  with xmlStyle.selectSingleNode('//*[@name="luckie"]') as IXMLDOMElement do
    setAttribute('match', s.DelimitedText);
  s.Text := xmlDoc.transformNode(xmlStyle);
  s.SaveToFile('c:\daten\dp\luckie\logtest.html');
  s.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 4. Mai 2006, 11:50
Hm, nein. Man soll auch die Möglichkeit haben zu filtern, wenn man die Datei schon im Browser geöffnet hat. Es müsste wohl irgendwie mit JavaScript oder so gehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 4. Mai 2006, 19:20
Ich schicke dir mal meinen Schichtplan, dann stellst du solche Fragen, wenn ich daheim bin.
Also, hier erst mal eine Notlösung (muss gleich pennen, habe morgen Frühschicht ):

XML-Code:
<xsl:template match="log">
  <html>
  <head>
     

     <script type="text/javascript"><![CDATA[
     
        function toggle(obj)
        {
           cb = document.getElementById(obj + "_cb");
           if (cb == null) return;
           
           cells = document.getElementsByTagName("TR");
           for (i = 0; i < cells.length - 1; i++)
           {
              if (cells[i].getAttribute("id") == obj)
              {
                 cells[i].style.display = (cb.checked)?"":"none";
              }
           }
        }
     
     ]]></script>
  </head>
  <body>
     <input type="checkbox" id="Debug_cb" checked="checked" onclick="toggle('Debug');"/> Debug


     <input type="checkbox" id="Info_cb" checked="checked" onclick="toggle('Info');"/> Informationen


     <input type="checkbox" id="Task_cb" checked="checked" onclick="toggle('Task');"/> Aufgaben


     <input type="checkbox" id="Warning_cb" checked="checked" onclick="toggle('Warning');"/> Warnungen


     <input type="checkbox" id="Error_cb" checked="checked" onclick="toggle('Error');"/> Fehler




     
</xsl:template>


<xsl:template match="Info|Task|Error|Warning|Debug|Hint|Start|Ende">
   <tr>
      <xsl:attribute name="class">
         
      </xsl:attribute>



      <xsl:attribute name="id"><xsl:value-of select="name()"/></xsl:attribute>



      <td><xsl:value-of select="name()"/></td>
      <td><xsl:value-of select="@TS"/></td>
      <td><xsl:apply-templates /></td>
   </tr>
</xsl:template>
Wie du hoffentlich siehst, habe ich ein weiteres Attribut ("id") für jede Tabellenzeile (tr) erstellt, dass als Inhalt den Namen der Aktion bekommt (Info, Warning, usw.). Oben in der HTML-Seite sind entsprechende Checkboxen ergänzt, die auch den Namen tragen (mit "_cb"-Postfix).
Klickst du eine Checkbox an, dann toggelt das Skript los: Es ermittelt den Status der gewählten Checkbox, sucht sich dann alle Tabellenzeilen und schaltet die auf sichtbar oder unsichtbar.

Bisher aufgetretenes Problem: Wenn du eine Box abwählst und die Seite per F5 neu lädtst, dann baut sich der XML-Code komplett auf, aber die Box bleibt abgewählt. In dem Fall musst du 2x klicken, um die unerwünschten Infos zu verbergen. Wenn dir das reicht, soll es mir recht sein.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 4. Mai 2006, 21:20
Mir persönlich würde es eventuell reichen, aber für den Kunden muss es perfekt sein. Könntest du das mal anhängen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 5. Mai 2006, 05:33
Zur Funktion oben noch eine Deklarieren:

XML-Code:
function toggleall()
{
  toggle('Debug');
  toggle('Info');
  toggle('Task');
  toggle('Warning');
  toggle('Error');
}
Und dann den body-Tag beim laden mit der function bestücken:

<body onload="toggleall();"> Müsste eigentlich hinhaun, IE6 macht es... FireFox hat sich zickig. Da müsst man dann wohl noch die Select-States für den reload übergeben... sooo tief steck ich in js aber nich drinne.

Ich hab die Änderungen von MathiasSimmack und mir mal reingebastelt. Download unten
Angehängte Dateien
Dateityp: zip logfile_108.zip (4,1 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 5. Mai 2006, 11:21
Danke, ich habe mich nämlich irgendwo immer verhauen und bnon dann ganz verloren gegenagen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 5. Mai 2006, 15:01
Warum auch immer, aber die Lösung von cruiser hat bei mir nicht funktioniert. Die Idee war aber gut, also habe ich die "toggleall"-Funktion kurzerhand so geändert:
Code:
function toggleall()
{
   cbs = document.getElementsByTagName("INPUT");
   for (i = 0; i <= cbs.length - 1; i++)
   {
      if (cbs[i] != null) cbs[i].checked = true;
   }
}
und dann machen bei mir IE6 und Firefox 1.5.0.3 das Gewünschte. Ich war zwar immer der Meinung, die Zählweise fängt bei Null an und endet demzufolge auch bei "length - 1", aber dann hat er in meiner Datei nie die letzte Checkbox Fehler berücksichtigt. Mit o.g. Variante, die eigentlich von 0 bis "length" läuft, geht es dann.


Perfekt genug, Luckie?
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 5. Mai 2006, 15:11
Wie gesagt... ich steck sooo tief nich in js

Bei mir klappets im FireFox auch nich... beim Reload werden auch die boxen neu gesetzt.

Und IE schluckts auch nich mehr Reload und der vergisst, wie die Boxen gesetzt waren

Edit: Oder hast du irgendwo erweitert?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Knoten filtern über Checkboxen in XML Datei

  Alt 5. Mai 2006, 15:20
Besten Dank ihr beiden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz