Avatar billede mrcorex Nybegynder
16. januar 2006 - 07:35 Der er 5 kommentarer og
1 løsning

xml:Kan man det her

Hej alle.

Er ikke ligefrem ekspert i xml, så der kommer nok et dumt spørgsmål. :)

<Request>
  <Block>
    <Data>
      <Request>
      </Request>
    </Data>
  </Block>
</Request>

Er det her en lovlig xml-fil? Jeg ved godt jeg mangler headeren, men det er den der <Request>-ting jeg spørger om. Den starter med en "<Request>" men længere inde i niveauer'ne kommer den en "<Request>" til? Er det lovligt ifølge xml-standarden?

Jeg er interesseret i hvordan en parser fungerer da jeg måske skal bruge denne teknologi til noget andet og måske skal skrive min egen parser til det projekt jeg har gang i. Derefter er jeg interesseret i hvordan de adskiller hvilken "</Request>" de skal have fat i når parseren "piller" data ud.
Avatar billede arne_v Ekspert
16. januar 2006 - 08:48 #1
det er ihvertfald lovligt for tags som ikke er yderste tags

så jeg tror at det også er lovligt for tags som er yderste tags
Avatar billede schwarz84 Nybegynder
16. januar 2006 - 08:54 #2
Ja, det er fuldt lovligt. Dog er det normalt konventionen at alle tags skrives med små bogstaver. Altså vil man normalt kalde det <request> og ikke <Request>. Det gælder alle tags.
Når man skriver en XML-parser er man ikke nødvendigvis interesseret i direkte at skelne mellem det to request tags. Det kommer selvfølgelig an på opgaven, men man ville nok vælge at lave en rekursiv struktur at parse til som afspejlede strukturen på XML'en i stedet for specifikt at handle en 'indre' og en 'ydre' <request>. Der kan jo igen være flere request-tags inde i det inderste, du har skrevet...
Avatar billede mrcorex Nybegynder
16. januar 2006 - 09:03 #3
Det jeg er ude efter er hvordan man eventuelt kunne håndtere tag-data inde i tag-data. Som det er nu er den nu nem nok at håndtere, også selv om der er tags ved samme navn under hinanden.

Men hvad med dette her så? Den kan jeg ikke lige greje. :)

<Request>
  <Block>
    <Data>
      <Request>
      </Request>
    </Data>
  </Block>
</Request>
<Request>
  <Block>
    <Data>
      <Request>
      </Request>
    </Data>
  </Block>
</Request>
<Request>
  <Block>
    <Data>
      <Request>
      </Request>
    </Data>
  </Block>
</Request>
<Request>
  <Block>
    <Data>
      <Request>
      </Request>
    </Data>
  </Block>
</Request>

Den kan jo sagtens være flere "blocks" af samme navn også. Hvordan ville man skrive en parser til det????
Avatar billede arne_v Ekspert
16. januar 2006 - 09:08 #4
nu ved jeg ikke hvilekn parser

men både DOM og event drevne (push eller pull) har ingen problemer med
nestede tags

hvis man XSLT transformer skal man være lidt forsigtig på hvad man mather på
Avatar billede schwarz84 Nybegynder
16. januar 2006 - 11:20 #5
corex: Nu kan jeg ikke helt gennemskue hvilket niveau vi snakker om at lave en parser på, så måske skal du uddybe om du vil bruge sådan noget som XSLT eller om du vil skrive det selv fra bunden eller næsten fra bunden med eksempelvis SAX (som er event-dreven).
Konkret ville jeg hvis jeg skulle programmere en parser specielt til dette sprog benytte mig af XML's smukke stak-struktur og bruge en stak til at hold styr på hvilket tag der var sidst åbnet.
Der skal så være en klasse for hver type tag (eller én klasse med et tag-name field, alt efter hvad anvendelsen er og hvor generelt, det skal være).
Hvert tag-object kan så have en liste over børn.
Når et tag åbnes tilføjer man det så til child-listen på det øverste element i stakken og pusher object svarende til det åbnede tag på stakken og når det lukkes, popper man det så fra stakken igen (på grund af XML's struktur vil det altid være det øverste element på denne stak, der svarer til det tag, der lukkes). Den træstruktur, du får ud af det, skulle være temmelig ligefrem at arbejde med...

Sådan noget kan eksempelvis laves med SAX (Simple API for XML). SAX var oprindeligt kun et Java API, men det findes efterhånden til de fleste sprog. SAX fortæller hvornår der åbnes og lukkes tags og man kan så hive data ud om disse tags (attributter og tekst), og resten skal man så stort set selv programmere. Det giver parsere som performer særdeles godt.
Avatar billede mrcorex Nybegynder
09. august 2006 - 07:58 #6
Hold da fast. Jeg havde helt glemt denne her. Opgaven er løst for længe siden. Jeg skrev min egen parsen. Sorry guys.

/CoRex
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
Kurser inden for grundlæggende programmering

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