E-carti

Soluția evidentă este înlocuirea etichetei LXP în interiorul etichetei HTML. Cu toate acestea, această abordare are un dezavantaj semnificativ. Ideea este că astfel de construcții sintactice încalcă integritatea marcajului în document. În limbile de marcare, un document format corect înseamnă că etichetele nu pot fi încorporate în conținutul altor etichete, ca în fragmentul următor:

„>

În unele situații, încorporarea etichetelor LXP în etichetele externe poate funcționa în condiții de siguranță, dar acest lucru nu este recomandat. Poate că cerințele pentru un document LXP corect format în viitor vor deveni mai stricte, deoarece un astfel de atașament nu numai că face dificilă citirea LXP, dar, de asemenea, încalcă integritatea sintactică a marcajului.

Pentru a rezolva astfel de probleme, LXP a introdus o etichetă . Această etichetă acționează ca un "înveliș" pentru afișarea de etichete externe (adică etichete care nu sunt etichete LXP). Eticheta Există un atribut obligatoriu xname care definește o etichetă care o înlocuiește la procesarea LXP. De exemplu, o etichetă este afișat ca o etichetă <а>.

Atributul opțional xappend vă permite să atașați un șir arbitrar la sfârșitul etichetei generate. De exemplu, atributul xappend = "checked" din eticheta de etichetă HTML creează o etichetă .

Toate celelalte atribute sunt transmise etichetei externe neschimbate. În parte, această circumstanță explică utilitatea etichetei , Deoarece variabilele substituite în , sunt înlocuite automat în eticheta externă primită. De exemplu, Lista 13.31 arată modul corect de a crea o etichetă HTML <1mg> în LXP.

Listing 13.31. Înlocuirea într-o etichetă externă cu un bloc gol

Rezultatul acestui fragment în documentul LXP (se presupune că lățimea variabilă este setată la 10):

<1mg src="images/spacer/gif" width="10" />

Acordați atenție caracterului următor / în etichetă . etichetă poate fi o deschidere, o închidere sau o etichetă cu un bloc gol, în funcție de ce etichetă este în cele din urmă necesară pentru ieșire. Cea mai importantă caracteristică a acestor etichete este că LXP urmărește toate etichetele "neînchise" și selectează numele etichetei adecvate la atingerea etichetei de închidere .

Dacă eticheta este creată pentru o etichetă externă cu un bloc gol (de exemplu, pentru o etichetă HTML ), trebuie să semnați ca o etichetă cu un bloc gol

și simbolul final /. În caz contrar, LXP va accepta cea mai apropiată etichetă de închidere pentru eticheta pereche a ultimei etichete de deschidere (în cazul nostru - ), ceea ce va duce la potrivirea incorectă a etichetelor. Luați în considerare fragmentul următor:

<-- ОШИБКА: тег с пустым блоком должен заканчиваться символом / -->

Acest fragment utilizează trei etichete . Două dintre ele (deschidere și închidere) se referă la etichetă

, iar a treia (deschidere) încapsulează eticheta . Deoarece eticheta HTML nu are o etichetă de încheiere asociată, această etichetă trebuie să fie o etichetă cu un bloc gol, dar LXP nu o ia ca atare (notează absența caracterului următor /). Problema este următoarea: LXP își amintește existența unui element deschis și când este atinsă prima etichetă de închidere crede că Ter nu se închide
, și eticheta.

Dacă variabila table_width este de 100, iar lățimea non-temporară este de 10, rezultatul greșit va arăta astfel:

<-- ОШИБКА: тег с пустым блоком должен заканчиваться символом / -->

Lista 13.32 prezintă combinația corectă de etichete .

Lista 13.32. Utilizarea etichetelor imbricate

<-- ПРАВИЛЬНО: тег с пустым блоком заканчивается символом / -->

Deoarece a doua etichetă în lista 13.32 se termină cu /, așa cum ar trebui să fie atunci când încapsulați etichete externe cu un bloc gol, LXP nu leagă eticheta de închidere la etichetă , iar rezultatul arata astfel:

<-- ПРАВИЛЬНО: тег с пустым блоком заканчивается символом / -->

Articole similare