OctectStream e.l. i XML

Tags:    xml

Hej.

Er der nogen smart måde at gemme binær data i en XML-fil? Man kunne selvfølgelig base64 encode det først e.l., men så kommer filen jo også til at fylde meget mere.

F.eks. vil jeg gerne kunne gemme en .exe-fil eller generelt bare noget blob data (eller hvad man nu vil kalde det) ned i en XML-fil. Jeg har læst forskellige tekster, der blot helt fraråder at man gemmer sådan data i en XML-fil, men nu vil jeg altså gerne gøre det alligevel. :-)

Håber nogen kan besvare mit spørgsmål.

På forhånd tak.

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hej.

Er der nogen smart måde at gemme binær data i en XML-fil? Man kunne selvfølgelig base64 encode det først e.l., men så kommer filen jo også til at fylde meget mere.

F.eks. vil jeg gerne kunne gemme en .exe-fil eller generelt bare noget blob data (eller hvad man nu vil kalde det) ned i en XML-fil. Jeg har læst forskellige tekster, der blot helt fraråder at man gemmer sådan data i en XML-fil, men nu vil jeg altså gerne gøre det alligevel. :-)

Håber nogen kan besvare mit spørgsmål.

På forhånd tak.

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------

Hej Bjarne,

Du kan bruge en CDATA sektion til at gemme data. XML parseren vil ignorere indholdet af CDATA sektionen. Med det, mener jeg at den ikke decompiler (special karakter) dataerne inden i en CDATA sektion men indlæser det som"rå" data.

Eks.
[pre]
<exe name="test.txt">
<![CDATA[Dette er indholdet af test.txt filen..]]>
</exe>
[pre]

Problemet kommer hvis dine binær data indholder ascii værdierne "]]>" da disse ikke må optræde inden i en CDATA sektion. Du kunne evt. lave din egen "escape" funtionalitet som indsætter "\\" foran ">" og selvfølgelig "\\" (lidt ala addslashes/stripslashes i php eller i C streng syntaksen).
Eller du kunne gemme data i base64 som selv forslår.


/Michael.



Du kan bruge en CDATA sektion til at gemme data. XML parseren vil ignorere indholdet af CDATA sektionen. Med det, mener jeg at den ikke decompiler (special karakter) dataerne inden i en CDATA sektion men indlæser det som"rå" data.

Eks.
Fold kodeboks ind/udKode 


Problemet kommer hvis dine binær data indholder ascii værdierne "]]>" da disse ikke må optræde inden i en CDATA sektion. Du kunne evt. lave din egen "escape" funtionalitet som indsætter "\\" foran ">" og selvfølgelig "\\" (lidt ala addslashes/stripslashes i php eller i C streng syntaksen).
Eller du kunne gemme data i base64 som selv forslår.


Jeg vil så lige høre. Det eneste som XML parseren går efter er ">"? Altså - det er nok blot at escape ">"-tegnet? Jeg vil bare være sikker på at "]]" ikke har nogen reel betydning uden der også er et ">" lige efterfølgende. Du siger at det er nok at escape med blot "\\", dvs. at "]]\\>" ikke bliver opfattet som noget af compileren, vel? Hvis det er ">" der har en betydning, kan man jo blot lave en escaping, hvor "\\a" betyder ">" og "\\b" betyder "\\".
Når du siger at parseren er ligeglad med specialtegn i en CDATA-sektion, betyder det vel også et som "&", der jo netop bruges til at lave specialtegn andre steder ... Så man kan godt skrive "abc&abc" uden at det har nogen betydning?

Men ellers tak for et godt svar. Jeg giver point i aften.

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------



Du kan bruge en CDATA sektion til at gemme data. XML parseren vil ignorere indholdet af CDATA sektionen. Med det, mener jeg at den ikke decompiler (special karakter) dataerne inden i en CDATA sektion men indlæser det som"rå" data.

Eks.
Fold kodeboks ind/udKode 


Problemet kommer hvis dine binær data indholder ascii værdierne "]]>" da disse ikke må optræde inden i en CDATA sektion. Du kunne evt. lave din egen "escape" funtionalitet som indsætter "\\" foran ">" og selvfølgelig "\\" (lidt ala addslashes/stripslashes i php eller i C streng syntaksen).
Eller du kunne gemme data i base64 som selv forslår.

Jeg vil så lige høre. Det eneste som XML parseren går efter er ">"? Altså - det er nok blot at escape ">"-tegnet? Jeg vil bare være sikker på at "]]" ikke har nogen reel betydning uden der også er et ">" lige efterfølgende. Du siger at det er nok at escape med blot "\\", dvs. at "]]\\>" ikke bliver opfattet som noget af compileren, vel? Hvis det er ">" der har en betydning, kan man jo blot lave en escaping, hvor "\\a" betyder ">" og "\\b" betyder "\\".
Når du siger at parseren er ligeglad med specialtegn i en CDATA-sektion, betyder det vel også et som "&", der jo netop bruges til at lave specialtegn andre steder ... Så man kan godt skrive "abc&abc" uden at det har nogen betydning?

Men ellers tak for et godt svar. Jeg giver point i aften.

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------

Hej Bjarke,

Parseren leder efter "]]>" hvilket vil sige at du godt kan bruge "]]" eller "]>" men bare ikke "]]>".
Du kan sagtens bruge &,< og > inde i et CDATA tag.
Hvorfor jeg skrev at du kun skulle escape > og \\ er fordi at parseren leder efter hele udtrykket ("]]>") og ikke kun dele af det.
Altså ville jeg bruge "\\>" = ">" og "\\\\" = "\\" men du kan selvfølgelig også bruge "\\a" og "\\b".

/Michael.



Parseren leder efter "]]>" hvilket vil sige at du godt kan bruge "]]" eller "]>" men bare ikke "]]>".
Du kan sagtens bruge &,< og > inde i et CDATA tag.
Hvorfor jeg skrev at du kun skulle escape > og \\ er fordi at parseren leder efter hele udtrykket ("]]>") og ikke kun dele af det.
Altså ville jeg bruge "\\>" = ">" og "\\\\" = "\\" men du kan selvfølgelig også bruge "\\a" og "\\b".


Ja, okay. Tak for svaret. "\\a" og "\\b" var blot for at skrive noget, men jeg tror nu også jeg vil benytte "\\>" og "\\\\", da det virker mere logisk - og også bliver brugt mange andre steder.

Lige et tillægsspørgsmål: Kan jeg starte/slutte data direkte op imod start og slut-markeringen? - eller i hvert fald med start-makeringen - man kan jo godt med slut. Det jeg mener er: Det er gyldigt at skrive <[CDATA[hej]]> uden noget mellemrum mellem "[" og "hej"?

Jeg burde vel også selv lige afprøve det, men har ikke på nuværende tidspunkt tid til det (desværre).

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------



Parseren leder efter "]]>" hvilket vil sige at du godt kan bruge "]]" eller "]>" men bare ikke "]]>".
Du kan sagtens bruge &,< og > inde i et CDATA tag.
Hvorfor jeg skrev at du kun skulle escape > og \\ er fordi at parseren leder efter hele udtrykket ("]]>") og ikke kun dele af det.
Altså ville jeg bruge "\\>" = ">" og "\\\\" = "\\" men du kan selvfølgelig også bruge "\\a" og "\\b".

Ja, okay. Tak for svaret. "\\a" og "\\b" var blot for at skrive noget, men jeg tror nu også jeg vil benytte "\\>" og "\\\\", da det virker mere logisk - og også bliver brugt mange andre steder.

Lige et tillægsspørgsmål: Kan jeg starte/slutte data direkte op imod start og slut-markeringen? - eller i hvert fald med start-makeringen - man kan jo godt med slut. Det jeg mener er: Det er gyldigt at skrive <[CDATA[hej]]> uden noget mellemrum mellem "[" og "hej"?

Jeg burde vel også selv lige afprøve det, men har ikke på nuværende tidspunkt tid til det (desværre).

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------

Hej,

Ja det kan du sagtens skrive "<![CDATA[hej]]>".

/michael.




CDATA står for Character Data - altså tekst, så det kan man ikke gemme bineære data i. Feks. vil EOF (End Of File) karakteren være katastrofal for din XML fil at ha' liggende inden midt i.

Der er en W3C workgroup der kigger på mulighederne i bineær XML, men indtilvidere er det kun snak.

Ergo, eneste udvej er base64 indkodning eller Y-encode, eller HEX, eller UU-encode, eller hva' man nu kan finde på.

- karmazilla -



t