Avatar billede skwat Praktikant
14. april 2005 - 21:20 Der er 5 kommentarer og
1 løsning

Input til at modtage XML via en socket stream

Hejsa,

Jeg søget lidt input til hvordan jeg kan splitte en stream i XML dokumenter?
Sagden er den at jeg via en socket skal modtage en række XML dokumenter, hvor jeg ikke kan være sikker på hvordan rod elementet ser ud.
eks. <skwat><bla>ikke tale</bla></skwat><spm><q>hvem tror du der svare</q><a>sikkert arne_v</a></spm>

Dette vil jeg så gerne have splittet til <skwat><bla>ikke tale</bla></skwat>
og <spm><q>hvem tror du der svare</q><a>sikkert arne_v</a></spm>

Jeg har overvejet at skrive en parcer, men på den anden side er jeg sikker på at .NET framworket kan 'do the job' for mig.
Avatar billede arne_v Ekspert
14. april 2005 - 21:48 #1
Det er ikke nemt fordi det jo ikke er et validt XML dokument.

Men med det indhold er jeg jo næsten nødt til at prøve at finde en workaround.
Avatar billede arne_v Ekspert
14. april 2005 - 22:22 #2
Det bedste jeg kan komme op med er denne rædsel:

using System;
using System.IO;
using System.Xml;

class MainClass
{
    public static void Main(string[] args)
    {
        string s = "<skwat><bla>ikke tale</bla></skwat><spm><q>hvem tror du der svare</q><a>sikkert arne_v</a></spm>";
        MyXmlTextReader xtr = new MyXmlTextReader(s);
        while(xtr.More)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(xtr);
            doc.Save(Console.Out);
        }
    }
}

class MyXmlTextReader : XmlTextReader
{
    private int len;
    private int last;
    private bool more;
    public MyXmlTextReader(string s) : base(new StringReader(s))
    {
        len = s.Length;
        last = 0;
        more = true;
    }
    public bool More
    {
        get
        {
            return more;
        }
    }
    public override bool Read()
    {
        if(last > 0 && Depth == 0)
        {
            last = 0;
            if(LinePosition >= len - 3) more = false;
            ResetState();
            return false;
        }
        else
        {
            last = Depth;
            return base.Read();
        }
    }
}
Avatar billede skwat Praktikant
15. april 2005 - 17:26 #3
Tak skal du have, læg et svar.

Jeg har et bonus spm. findes der en nem måde at tjekke om jeg har modtaget hele det sidste XML dokument? Eks. hvis data er <skwat><bla>ikke tale</bla></skwat><spm><q>hvem tror du der svare</q><a>sikkert arne_v</a

Så vil jeg gerne finde finde <skwat><bla>ikke tale</bla></skwat>
Avatar billede skwat Praktikant
15. april 2005 - 17:26 #4
btw. læg et svar
Avatar billede arne_v Ekspert
15. april 2005 - 17:39 #5
svar
Avatar billede arne_v Ekspert
15. april 2005 - 17:40 #6
du får en exception hvis et dokument ikke er komplet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester