Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

XML variables

Pagina: 1
Acties:

Verwijderd

Topicstarter
Na menig tijd op google te hebben gezeten zonder enig relevante informatie te hebben gevonden doe ik mijn poging tot hulp. Ik ben bezig in C++ een (server) programma te schrijven dat logboeken bijhoudt van bijvoorbeeld onbekende "packets" met ip-adress ect in een xml formaat op te slaan.

Nu zou ik graag, indien mogelijk, deze xml files uitlezen m.b.v. xsl (stylesheet). Tot zover lukt dit alles me prima. Om het overzicht te bewaren zou ik graag sorteer functie willen inbouwen, om dat zo te doen heb ik een manier nodig om variables te kunnen parsen.

Normaal onder php is dit vrij gemakkelijk met
Log.php?sort=byip

Maar is er ook een mogelijkheid hiervoor met xml (hou er wel rekening mee dat het niet op een externe server gedraaid wordt, dus enige cheats om asp of php te gebruiken tellen niet :P)

In iedergeval alvast bedankt.

Verwijderd

Als je de XML toch gaat transformeren met XSL, kun je toch gewoon xsl:sort gebruiken? Eventueel met een parameter die je aan de transformator meegeeft.

Verwijderd

Topicstarter
Jah zover was ik al gekomen. Echter gaat het om meer om 2 velden, en deze heb ik het liefst op keuze sorteerbaar. Dus als je op de header van een column drukt dat hij zich daarop gaat sorteren.

Als ik bijv. ?sortby=ip in de xsl kan opvragen kan, kan ik die sort-by functies er wel bij maken.
Het is alleen dat opvragen waar ik niet aan uit kom, alles wat ik dusver heb gevonden zijn statische parameters.

Verwijderd

Ik snap je hele probleem met dat "opvragen" niet. Je hebt een bestand met gegevens in XML formaat. Dat moet je dus ergens mee parsen en transformeren om de gewenste output te krijgen. Je kunt dan tussen het parsen en het transformeren vast wel ergens een stukje code inbouwen dat de juiste parameter meegeeft.

Maar dat is het hem nou juist. Waarmee ga je de logs bekijken/verwerken? Heb je daar een aparte tool voor geschreven? Wil je die via HTTP serveren? Ik snap al niet waarom je over ASP en PHP begint. En sowieso, PHP kun je ook wel voor command line scripts gebruiken. Dus wat bedoel je nou precies?

Verwijderd

Topicstarter
Okay even zo simpel mogelijk gezegd:

1. De server houdt server logs bij in een xml formaat.

2. Deze logs moeten worden uitgelezen worden met niets minder als een browser met xml & xsl ondersteuning.

3. Dit alles moet gebeuren zonder tussenkomst van een HTTP server. Dus direct openen vanaf de hardeschijf.

- - - - -

En ik had het over php en asp om aan te geven over de "get" parameters. Dat ik die daar wel weet te vinden maar in xml nog niet ben tegengekomen.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Het schijnt wel mogelijk te zijn om in je XSL een request-parameter op te vragen maar een XSL-guru zal dan zeggen dat XSL daar niet voor bedoeld is ;)

Je zou natuurlijk je probleem naar een andere "tier" kunnen verschuiven en het in html/javascript doen of je data correct gesorteerd aanleveren aan je xsl.

edit: ok je hebt maar 2 tiers dus dan zou je het in javascript moeten doen: http://www.brainjar.com/dhtml/tablesort/demo.html

[ Voor 19% gewijzigd door Juup op 21-07-2007 00:44 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Verwijderd schreef op zaterdag 21 juli 2007 @ 00:35:
Okay even zo simpel mogelijk gezegd:

1. De server houdt server logs bij in een xml formaat.
2. Deze logs moeten worden uitgelezen worden met niets minder als een browser met xml & xsl ondersteuning.
3. Dit alles moet gebeuren zonder tussenkomst van een HTTP server. Dus direct openen vanaf de hardeschijf.

En ik had het over php en asp om aan te geven over de "get" parameters. Dat ik die daar wel weet te vinden maar in xml nog niet ben tegengekomen.
Logisch. Wie of wat moet die parameters volgens jou verwerken? Moet een browser zomaar weten welke parameters hij moet aanpassen? Hoe moeten die parameters dan aangepast worden? Moet de browser daar ook maar een user interface voor bedenken?

Leuk dat je iets hebt bedacht om XML logbestanden te genereren, maar je moet natuurlijk niet verwachten dat een browser zomaar alles voor je kan bedenken. Voor Firefox zou je wel iets met XUL kunnen doen, maar dat was ook vast niet je bedoeling.
Juup schreef op zaterdag 21 juli 2007 @ 00:38:

Je zou natuurlijk je probleem naar een andere "tier" kunnen verschuiven en het in html/javascript doen of je data correct gesorteerd aanleveren aan je xsl.
Dit is nog niet eens zo gek bedacht. Je kunt transformeren naar HTML en met Javascript misschien wel het een en ander veranderen.

[ Voor 15% gewijzigd door Verwijderd op 21-07-2007 00:41 ]


Verwijderd

Topicstarter
[/quote]
Logisch. Wie of wat moet die parameters volgens jou verwerken? Moet een browser zomaar weten welke parameters hij moet aanpassen? Hoe moeten die parameters dan aangepast worden? Moet de browser daar ook maar een user interface voor bedenken?
[quote]

Nou ik hoopte eigenlijk de xsl, dat ik doormiddel van bijvoorveeld: "log.xml?sort=byip" en in de xml dan kan kijken welke waarde "sort" is. Gezien xml een best wel geadvanceerde mogelijkheden heeft leek het mij wel logish voor enige support hiervoor.

Maar ja, blijkbaar is dit dus niet zo. En zal ik dus een javascript moeten schrijven om de velden te sorteren. Of zie ik de dingen nu verkeerd?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je geeft zelf aan dat je het niet via een webserver kunt bekijken, maar je komt wel aanzetten met een http parameter. 'log.xml?sort=byip' is bijv. onder linux een valide bestandsnaam. Heeft jouw bestand alleen log.xml, dan zal de browser aangeven dat hij het bestand niet kan vinden. Het gedeelte vanaf het vraagtegen wordt door een webserver verwerkt, niet door de browser.

Maar je geeft aan dat een C++ programma de XML aanmaakt (libxml2). Waarom schrijf je dan ook niet een c++ programma (waaraan je dus argumenten kunt meegeven) welke via libxslt de xml omzet naar iets anders. Misschien naar html? Maar je zou ook talen als php, perl, java, c# (mono) kunnen gebruiken.

readlog -s byip > sortedbyip.html

Een snelle workaround is om aan het root element het sort 'keyword' als attribute toe te voegen.
Het voorbeeld gaat er vanuit dat het root element 'root' heet en dat elke log regel wordt beschreven via het element 'log' en de velden zoals ip en date zijn opgenomen als attributen van het element log.

In je xsl krijg je dan iets als
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xsl:template match="/">
<xsl:choose>
  <xsl:when test="/root/@sortfield = 'byip'><xsl:call-template name="sortbyipanddatetime" /></xsl:when>
  <xsl:otherwise>No sort method found..</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="sortbyip">
  <xsl:for-each select="//log">
     <xsl:sort select="@ip" />
     <xsl:sort select="@date" />
     <xsl:call-template name="printlogline" />
  </xsl:for-each>
</xsl:template>


Bovenstaand voorbeeld wordt eerst gesorteerd op ip en dan op datum. En voor elke manier van sorteren maak je een template. Heel simpel en gemakkelijk. Sommige xml/xsl parsers hebben ook de mogelijkheid om dynamisch variabelen (xsl:variable) te zetten. In dat geval hoef je niet het sort attribute aan het root element van de xml toe te voegen.

If it isn't broken, fix it until it is..


  • r0bert
  • Registratie: September 2001
  • Laatst online: 28-11 00:42
PHP functies in XSLT. Misschien dat er ook zoiets voor C++ zelf is, zeker als je dezelfde library gebruikt?
Pagina: 1