Este o "practică proastă" să fii sensibil la liniile de scriere în documentele XML?

Generez niște documente xml și când vine vorba de partea de adresă, am fragmente care arată astfel:

15 Sample St Example Bay Some Country

The XSLT that I have for converting this to XHTML has some funky recursive template to convert newline characters within strings to
tags.

Toate acestea funcționează bine; dar este considerat "practici proaste" să se bazeze pe liniile în documentele XML? Dacă da, este recomandat să fac asta în schimb?

15 Sample St Example Bay Some Country

Se pare că ar fi foarte ciudat să îmi împachetezi fiecare loc în care textul meu ar putea fi mai multe linii cu etichete de genul ăsta ..

0
fr hi bn

12 răspunsuri

If you need your linebreaks preserved, use a CDATA block, as tweakt said

În caz contrar, aveți grijă. De cele mai multe ori, liniile vor fi păstrate de software-ul XML, dar uneori nu vor fi și într-adevăr nu doriți să vă bazați pe lucruri care lucrează doar prin coincidență

0
adăugat

Da, cred că folosirea unui bloc CDATA ar proteja spațiul alb. Deși unele API parser vă permit să păstrați spațiul alb.

0
adăugat

Ce ar trebui să faci este să convertești XML-ul într-un format care păstrează spațiul alb.

So rather than seek to replace \n with
you should wrap the whole block in a

That way, your address is functionally preserved (whether you include line breaks or not) and the XSTL can choose whether to preserve white-space in the result.

0
adăugat

I don't see what's wrong with tags.
Apparently, the visualization of the data is important to you, important enough to keep it in your data (via line breaks in your first example). Fine. Then really keep it, don't rely on "magic" to keep it for you. Keep every bit of data you'll need later on and can't deduce perfectly from the saved portion of the data, keep it even if it's visualization data (line breaks and other formatting). Your user (end user of another developer) took the time to format that data to his liking - either tell him (API doc / text near the input) that you don't intend on keeping it, or - just keep it.

0
adăugat

Acesta este probabil un exemplu puțin înșelător, deoarece adresa este puțin ne-normalizată în acest caz. Este un compromis rezonabil, totuși din moment ce domeniile de adresare sunt greu de normalizat. Dacă faceți întreruperile de linie să transportați informații importante, nu vă standardizați și faceți ca postul să interpreteze sensul rutei de linie.

Aș spune că, în mod normal, aceasta nu este o problemă mare, dar în acest caz cred că eticheta Line este cea mai corectă, deoarece arată în mod explicit că nu interpretați ceea ce înseamnă liniile în diferite culturi. (Rețineți că majoritatea formularelor pentru introducerea unei adrese au codul poștal etc. și linia de adrese 1 și 2.)

The awkwardness of having the line tag comes with normal XML, and has been much debated at coding horror. http://www.codinghorror.com/blog/archives/001139.html

0
adăugat

Cred că singura problemă reală este că face xml mai greu de citit. de exemplu.


    
        
            
15 Sample St Example Bay Some Country

If pretty xml isn't a concern, I'd probably not worry about it, so long as it's working. If pretty xml is a concern, I'd convert the explicit newlines into
tags or \n before embedding them in the XML.

0
adăugat

În general, este considerată o practică proastă de a se baza pe liniile de intersecție, deoarece este o modalitate fragilă de a diferenția datele. În timp ce majoritatea procesoarelor xml vor păstra orice spațiu alb introdus în XML, nu este garantat.

Problema reală este că majoritatea aplicațiilor care trimit xml într-un format care poate fi citit ia în considerare întregul spațiu într-un interchangeable xml și ar putea să le prăbușească într-un singur spațiu. De aceea XSLT dvs. trebuie să sară prin astfel de cercuri pentru a face datele corect. Utilizarea unei etichete "br" ar simplifica foarte mult transformarea.

O altă problemă potențială este că dacă deschideți documentul xml într-un editor xml și îl tipăriți destul de mult, este posibil să pierdeți acele pauze de linie.

Dacă continuați să utilizați liniile de linii, asigurați-vă că adăugați un atribut xml: space = "preserve" la "address". (Puteți face acest lucru în DTD-ul dvs., dacă îl utilizați.)

Unele sugerate lectură

Aplicațiile xml par adesea să ia o   atitudine cavalieră față de spațiul alb   deoarece regulile despre locurile din   un document xml unde spațiul alb   nu contează, uneori, dați-le pe acestea   aplicații gratuite pentru a adăuga sau   eliminați spațiul alb în anumite locuri.

0
adăugat

The xml spec has something to say regarding whitespace and linefeeds and carriage returns in particular. So if you limit yourself to true linefeeds (x0A) you should be Ok. However, many editing tools will reformat xml for "better presentation" and possibly get rid of the special syntax. A more robust and cleaner approach than the "< line>" idea would be to simply use namespaces and embed XHTML content, e.g.:

15 Sample St
Example Bay
Some Country

Nu este nevoie să reinventezi roata când vine vorba de vocabularul standard.

0
adăugat

Depinde cum citiți și scrieți XML.

If xml is being generated automatically - if newlines or explicit \n flags are being parsed into
- then there's nothing to worry about. Your input likely doesn't have any other xml in it so it's just cleaner to not mess with xml at all.

În cazul în care etichetele sunt lucrate manual, este mai curat să aveți doar o linie de rupere, dacă mă întrebați.

Excepția este dacă folosiți DOM pentru a obține o structură din XML. În acest caz, pauzele de linie sunt evident rău pentru că nu reprezintă corect heirarhia. Se pare că ierarhia este irelevantă pentru cererea dvs., totuși, linia de rupere sună suficient.

Dacă xml arata prost (mai ales dacă este generat automat), Tidy poate ajuta, deși funcționează mai bine cu codul HTML decât cu XML.

0
adăugat

I recommend you should either add the
line breaks or maybe use line-break entity -

0
adăugat

Cum se utilizează atributele pentru a stoca datele mai degrabă decât nodurile de text:

Știu că folosirea atributelor vs. nodurile de text este un subiect des întâlnit, dar am rămas cu atributele 95% din timp și nu am avut probleme din cauza asta.

0
adăugat

Puțini oameni au spus că blocurile CDATA vă vor permite să păstrați pauze de linie. Este gresit. Secțiunile CDATA vor face ca marcarea să fie procesată doar ca date de caractere, acestea nu vor schimba procesarea rupturii liniei.

15 Sample St Example Bay Some Country

este exact la fel ca

Singura diferență este modul în care API-urile diferite raportează acest lucru.

0
adăugat