Cum să lucrați cu markup-ul XML personalizat în .NET
Cum să lucrați cu marcaj XML personalizat în .NET
Un document Word poate conține date XML personalizate alături de conținutul său vizibil — date utilizate pentru a lega controalele de conținut, a stoca metadate specifice aplicației sau a încorpora părți adăugate de o altă aplicație. Acest ghid arată cum să citiți acele date, să adăugați părți XML personalizate noi și să inspectați etichetele inteligente moștenite pe care documentele mai vechi le pot conține în continuare, utilizând CustomXmlPart, CustomXmlProperty și SmartTag în Aspose.Words FOSS pentru .NET.
Ghid pas cu pas
Pasul 1: Citiți datele XML personalizate dintr-un document
Document.CustomXmlParts returnează un CustomXmlPartCollection — același mecanism pe care Word îl folosește pentru a susține controalele de conținut mapate la XML. Iterați colecția sau apelați GetById(id) când știți deja ce parte aveți nevoie, pentru a obține un CustomXmlPart. Fiecare parte expune Id, un Data tablou de octeți care conține XML brut, un DataChecksum pentru detectarea modificărilor datelor fără o comparație completă a octeților și Schemas — un CustomXmlSchemaCollection care listează schemele XML asociate cu aceasta.
Pasul 2: Adăugați sau actualizați o parte XML personalizată
Apelați CustomXmlPartCollection.Add(id, xml) cu un șir de identificare și conținutul XML pentru a crea direct o parte, sau construiți un CustomXmlPart separat și îl transmiteți la Add(part). Pentru a elimina datele, utilizați RemoveAt(index) pe o poziție specifică sau Clear() pentru a șterge fiecare parte. Când copiați datele XML personalizate între documente, folosiți CustomXmlPart.Clone() (sau Clone() din colecție) pe partea sursă în loc să re-citiți și să adăugați din nou XML brut, apoi adăugați clonul la Document.CustomXmlParts din documentul țintă.
Pasul 3: Gestionați schemele asociate cu o parte
CustomXmlPart.Schemas ajunge la un CustomXmlSchemaCollection, care urmărește URI-urile de schemă asociate cu partea ca șiruri simple în loc de obiecte de schemă analizate. Utilizați Add(value) pentru a înregistra un URI de schemă, Remove(name) sau RemoveAt(index) pentru a elimina unul, IndexOf(value) pentru a localiza unul și Clear() pentru a le elimina pe toate. Count raportează câte URI-uri de schemă sunt în prezent asociate cu partea.
Pasul 4: Lucrați cu părți personalizate la nivel de pachet
Nu fiecare parte nevizibilă dintr-un pachet OOXML este XML personalizat. Document.PackageCustomParts returnează un CustomPartCollection de obiecte CustomPart — părți arbitrare stocate în pachet, cum ar fi părți adăugate de o altă aplicație care a modificat fișierul. Fiecare CustomPart are un Name, ContentType, RelationshipType, un tablou de octeți Data și un semnal IsExternal care indică dacă este o referință externă în loc de conținut încorporat. Add(part), RemoveAt(index) și Clear() gestionează colecția în același mod ca CustomXmlPartCollection. Verificați PackageCustomParts — nu CustomXmlParts — atunci când o parte pe care documentul dvs. ar trebui să o conțină nu apare în colecția XML personalizată.
Pasul 5: Inspectați etichetele inteligente vechi și proprietățile lor
SmartTag este un tip de nod (NodeType.SmartTag, construit cu SmartTag(doc)) care reprezintă o etichetă inteligentă legacy Word înfășurată în jurul textului recunoscut. Verificați Element și Uri împreună pentru a identifica care recunoaștor a creat eticheta, apoi citiți Properties — un CustomXmlPropertyCollection — pentru datele structurate pe care recunoaștorul le-a atașat. Într-un CustomXmlPropertyCollection, indexatorul (de ex. properties["MyProp"]) sau Contains(name) caută o proprietate specifică, IndexOfKey(name) returnează poziția acesteia, iar Remove(name)/RemoveAt(index)/Clear() elimină intrările; fiecare CustomXmlProperty este construit cu CustomXmlProperty(name, uri, value) și expune Name, Uri și Value. Deoarece SmartTag derivă din CompositeNode, participă și el la arborele documentului ca alte noduri, susținând Accept(visitor), AcceptStart(visitor) și AcceptEnd(visitor) pentru traversare bazată pe DocumentVisitor.
Probleme comune și remedii
CustomXmlPartCollection.GetById(id) returnează nimic utilizabil. ID-ul nu se potrivește cu nici o parte prezentă în Document.CustomXmlParts. Enumeră colecția pentru a confirma că ID-ul este prezent, sau adaugă mai întâi partea cu Add(id, xml).
O parte adăugată de o altă aplicație nu este găsită prin iterare CustomXmlParts. Părțile de pachet non-XML sunt expuse prin Document.PackageCustomParts, nu CustomXmlParts. Verifică PackageCustomParts (a CustomPartCollection) în schimb.
SmartTag.Properties este gol chiar dacă eticheta este clar prezentă. Nu fiecare recunoaștor de etichete inteligente atașează proprietăți structurate. Verificaţi SmartTag.Element and Uri pentru a confirma ce recunoaștor a creat eticheta înainte de a presupune că proprietăți specifice vor fi prezente.
Datele personalizate XML nu par legate de controlul de conținut la care ar trebui să fie asociate. Controalele de conținut se leagă de XML personalizat prin propria configurație de legare a datelor, nu automat de fiecare CustomXmlPart in Document.CustomXmlParts. Confirmaţi la ce parte este de fapt legat un anumit control de conținut, în loc să presupuneţi o relație unu-la-unu.
Întrebări frecvente
Cum adaug date personalizate XML într-un document?
Apelați Document.CustomXmlParts.Add(id, xml) cu un șir de identificare și conținut XML, sau construiți un CustomXmlPart separat și îl transmiteți către Add(part).
Care este diferența dintre CustomXmlPart și CustomXmlProperty?
CustomXmlPart este o insulă completă de date XML — o încărcătură de tip tablou de octeți plus scheme asociate — accesată prin Document.CustomXmlParts. CustomXmlProperty este o pereche simplă nume/valoare, de obicei accesată prin SmartTag.Properties mai degrabă decât direct din document.
Cum pot copia datele personalizate XML dintr-un document în altul?
Apelă Clone() pe CustomXmlPart sursă, apoi adaugă clonă la Document.CustomXmlParts documentului țintă cu Add(part).
Ce este un SmartTag și când aș putea întâlni unul?
SmartTag este o funcție legacy din Word care reprezintă text recunoscut și înfășurat de un recunoaștor de smart-tag — un nod de document (NodeType.SmartTag) cu un Element și Uri care identifică recunoaștorul, plus o colecție Properties de valori CustomXmlProperty. Apare în documente care au fost create sau editate cu smart tags activate în versiunile mai vechi de Word.
Cum pot afla câte părți personalizate XML sau părți de pachet are un document?
Citește Count pe Document.CustomXmlParts (un CustomXmlPartCollection) sau Document.PackageCustomParts (un CustomPartCollection) respectiv.