[Javascript] Tekstfile naar XML

Pagina: 1
Acties:

  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
Ok ik zit hier nu al even te zoeken op hetvolgende.
Ik krijg vanuit Machinedeployment een text file die als volgt geordend is:
code:
1
2
3
4
5
6
7
8
9
10
1,"Raak deze toets aan om uw afschriften af te drukken."
2,"OK"
3,"Stop"
4,"Andere"
5,"?"
6,"Kies"
7,"Ja"
8,"Nee"
9,"Terug"
...

Eigenlijk zou ik via javascript uit deze file moeten kunnen zeggen: ik wens nummer 6 te lezen. Aangezien de filereading in javascript behoorlijk bagger is zou ik deze text file liever in zijn geheel via javascript transformeren (bij startup van de sessie) naar een XML file zodat ik lekker door de nodes kan browsen.
Kan iemand me daarmee even op weg zetten? De hele file inlezen lukt wel hem naar een xml bestand parsen lukt net iets minder goed.

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:13

Cyphax

Moderator LNX
Ik zou de textfile inlezen in een string, en dan splitten op newlines, zodat je een array krijgt. Die zou ik vervolgens splitten op komma's zodat je een 2-dimensionale array krijgt (dat moet je overigens zelf regelen maar dat stelt niet zoveel voor).
Daar kun je mooi doorheen lopen en elementjes aanmaken. :)

Overigens, als je het netjes in een 2-dimensionale array hebt hoef je het niet meer in XML te zetten om je doel te bereiken. Het arrayelement met '6' kun je er ook zo uit pikken.

[ Voor 41% gewijzigd door Cyphax op 21-06-2006 11:56 ]

Saved by the buoyancy of citrus


  • RM-rf
  • Registratie: September 2000
  • Nu online

RM-rf

1 2 3 4 5 7 6 8 9

Waarom wil je eerst een gewone platte tekstfile willen parsen en omzetten naar XML, om die dan nóg eens te willen parsen en verder te verwerken ...
dat is volgens mij dubbelop en ik zie het voordeel ervan niet...

Als de file op voorhand als XML gegenereerd kan worden, (of bv zelfs nog liever als JSON, wat eigenlijk qua javascript databehandeling enorm voordelig kan zijn en erg snel is) ja dan heeft dat zin. maar dat dubbelop parsen, nee daar zie ik geen voordeel van in, dat is dubbbel werk.

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
nee ik krijg enkel deze textfiles, probleem is dat ik ze niet kan ontvangen en zelf parsen naar xml ofzo, ze worden rechtstreeks in productie geupdate dus ik moet er @ runtime mee werken.
Ik zou ze willen naar xml omzetten omdat er soms nog variabelen instaan die ik moet parsen en het lijkt we even handig als ik deze in een node kan zetten.
Ik wil gewoon bij start van de sessie een XML maken uit de al dan niet geupdate textfile die ik dan in memory hou tijdens de hele run.

  • RM-rf
  • Registratie: September 2000
  • Nu online

RM-rf

1 2 3 4 5 7 6 8 9

Javascript mag natuurlijk lokaal geen bestanden wegschrijven, als je daarop doelt (enkel als je de security zeer ruim zet, maar dat is in weinig omstandigheden erg bruikbaar)

het is volgens mij eerder nuttig om ervoor te zorgen dat de ingeladen gegevens gewoon 'persistent' blijven, bv door slim te werken met enkel het versen van frames binnen de pagin en het niet compleet herladen van de content.

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
nee gewoon naar een xml op de server. Tgaat niet over al dan niet persistent data, ik moet gewoon snel kunnen navigeren door die files via een java scriptje

  • RM-rf
  • Registratie: September 2000
  • Nu online

RM-rf

1 2 3 4 5 7 6 8 9

dafz0r schreef op woensdag 21 juni 2006 @ 14:09:
nee gewoon naar een xml op de server. Tgaat niet over al dan niet persistent data, ik moet gewoon snel kunnen navigeren door die files via een java scriptje
Dan wil je dus _niet_ transformeren maar gewoon een XML file van een server inlezen ...?

Dat kan toch redelijk makkelijk via XMLhttprequest en AJAX?
Sorry, maar ik begrijp werkelijk niet _waar_ je nu precies op doelt en wát nu precies niet lukt

[ Voor 11% gewijzigd door RM-rf op 21-06-2006 14:13 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-02 23:22

Janoz

Moderator Devschuur®

!litemod

Wat is er nu zo moeilijk aan het tekst bestandje? Zo te zien kun je die keurig in een array / als map misbruikte array zetten en gebruiken. Ook het uitlezen kun je met xmlhttprequest doen (je krijgt dan afaik enkel een textnode terug, maar volgens mij kun je het resultaat gewoon als string verwerken)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
zo deed ik het al, enkel geeft hij speciale karakters zo als (?). Kan responseText daarmee niet om ofzo?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-02 23:22

Janoz

Moderator Devschuur®

!litemod

Lijkt me eerder een fout van de webserver of de webapplicatie die de tekst met de verkeerde character encoding verstuurd.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
op dit moment staat alles gewoon nog locaal. gewoon een .htm en een .txt in dezelfde folder

  • wjv
  • Registratie: December 2003
  • Laatst online: 11:02

wjv

Probeer de responseBody property eens om de inhoud op te vragen. Ik kan mij 'iets' herinneren met encoding problemen met responseText.

  • RM-rf
  • Registratie: September 2000
  • Nu online

RM-rf

1 2 3 4 5 7 6 8 9

dafz0r schreef op woensdag 21 juni 2006 @ 14:52:
zo deed ik het al, enkel geeft hij speciale karakters zo als (?). Kan responseText daarmee niet om ofzo?
Explorer's responseText heeft inderdaad een bug, wanneer het een gecached resultaat opent dat speciale karakters bevat...

mogelijk is dat te omzeilen door een extra no-cache parameter mee te geven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function AjaxLoad() { 
    if (typeof(XMLHttpRequest) != 'undefined') // Mozilla, Opera, Safari sowie Internet Explorer 7
        xmlHttp = new XMLHttpRequest();
    if (!xmlHttp) { // Internet Explorer 6 und älter
        try {
            xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                xmlHttp  = false;
            }
        }
    }
    if (xmlHttp) {
        var URI = "tekstfile.txt" + '?hash='+new Date().getTime()
        xmlHttp.open('GET', URI, true);
        xmlHttp.onreadystatechange = function () {
            if ( xmlHttp.readyState == 4 ) {
                parseConfig()
            }
        };
        xmlHttp.send(null);
    }
}

(de gevraagde URI krijgt een extra hash mee, die iedere request anders is waardoor caching onmogelijk is)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
responseBody geeft alles weer in chinese tekens :)
De hash heeft geen invloed

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function openFile(fName, nr)
    {
        objXml = new ActiveXObject("Microsoft.XMLHTTP");

        var datafile = "tra/" + fName + '?hash='+new Date().getTime();

        objXml.open("GET", datafile, true);
        objXml.onreadystatechange=function() {
           if (objXml.readyState==4) {
               display(objXml.responseText, nr);
          }
         }

        objXml.send(null);
    }
    
    function display(msg, nr) {
      var next = parseInt(nr);
      next = next + 1;
      next = next + "";
      nr = nr + ',';
      next = next + ',';
      content.innerHTML = msg.substring(msg.indexOf(nr), msg.indexOf(next));
      //content.innerHTML = msg;
    }

  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
ik kom der ni uit...
kan er mij iemand zeggen hoe ik die reponseBody deftig kan uitlezen?

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:13

Cyphax

Moderator LNX
Je kunt ook proberen responseXML uit te lezen:
"This property represents the response entity body as parsed by the MSXML XMLDOM parser."
http://www.devguru.com/Te...pRequest_responseXML.html

Saved by the buoyancy of citrus


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
had ik al geprobeerd maar die lijkt me leeg te zijn ofwel kan ik geen deftige code produceren om hem uit te lezen :D

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:13

Cyphax

Moderator LNX
dafz0r schreef op donderdag 22 juni 2006 @ 10:13:
had ik al geprobeerd maar die lijkt me leeg te zijn ofwel kan ik geen deftige code produceren om hem uit te lezen :D
Leeg?
If the response was generated by an ASP page, and the MIME type was not correctly set to 'text/xml', responseXML will be empty.
Het zou natuurlijk kunnen... ;)
Maar met responseXML kun je parse errors nog nagaan, misschien is de XML gewoon niet goed.

Saved by the buoyancy of citrus


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
mja der zit gewoon flat text in, geen xml :)

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 14:13

Cyphax

Moderator LNX
dafz0r schreef op donderdag 22 juni 2006 @ 10:27:
mja der zit gewoon flat text in, geen xml :)
Dat lijkt me stug, het komt van de parser af... kun je niet door die XML heenlopen?

Saved by the buoyancy of citrus


  • dafz0r
  • Registratie: April 2003
  • Laatst online: 12-02 12:50
Cyphax schreef op donderdag 22 juni 2006 @ 10:29:
[...]

Dat lijkt me stug, het komt van de parser af... kun je niet door die XML heenlopen?
Ow, zo bedoel je.. dno als ik probeer met firstchild enz kom ik er toch niet

dit heb ik nu als oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function openFile(fName, nr)
    {
        objXml = new ActiveXObject("Microsoft.XMLHTTP");

        var datafile = "tra/" + fName + '?hash='+new Date().getTime();

        objXml.open("GET", datafile, true);
        objXml.onreadystatechange=function() {
           if (objXml.readyState==4) {
               display(objXml.responseBody, nr);
          }
         }

        objXml.send(null);
    }
    
    function display(msg, nr) {
      var next = parseInt(nr);
      next = next + 1;
      next = next + "";
      nr = nr + ',';
      next = next + ',';
      var s = new ActiveXObject("ADODB.Stream"); 
      s.Mode = 3; 
      s.Type = 1;
      s.Open(); 
      s.Write(msg); 
      s.Position = 0;
      s.Type = 2;
      s.Charset = "ISO-8859-1";
      msg = s.ReadText(-1);
      content.innerHTML = msg.substring(msg.indexOf(nr), msg.indexOf(next));
    }



is er geen manier om van
code:
1
objXml = new ActiveXObject("Microsoft.XMLHTTP");
meteen de charset te zetten?

[ Voor 10% gewijzigd door dafz0r op 22-06-2006 10:43 ]


  • wjv
  • Registratie: December 2003
  • Laatst online: 11:02

wjv

Je kan in je header een request doen voor een bepaalde charset, bijvoorbeeld 'xml/text' met
code:
1
objXml.setRequestHeader( "Content-Type", "text/xml" )
Pagina: 1