Come lavorare con markup personalizzato XML in .NET

Come lavorare con markup personalizzato XML in .NET

Come lavorare con markup personalizzato XML in .NET

Un documento Word può contenere dati personalizzati XML accanto al suo contenuto visibile — dati utilizzati per associare controlli di contenuto, memorizzare metadati specifici dell’applicazione o incorporare parti aggiunte da un’altra applicazione. Questa guida mostra come leggere tali dati, aggiungere nuove parti personalizzate XML e ispezionare i vecchi smart tag che i documenti più datati potrebbero ancora contenere, usando CustomXmlPart, CustomXmlProperty e SmartTag in Aspose.Words FOSS per .NET.


Guida passo-passo

Passo 1: Leggere i dati personalizzati XML da un documento

Document.CustomXmlParts restituisce un CustomXmlPartCollection — lo stesso meccanismo che Word utilizza per supportare i controlli di contenuto mappati a XML. Itera la collezione, o chiama GetById(id) quando sai già quale parte ti serve, per ottenere un CustomXmlPart. Ogni parte espone Id, un Data array di byte contenente il XML grezzo, un DataChecksum per rilevare se i dati sono cambiati senza un confronto completo dei byte, e Schemas — un CustomXmlSchemaCollection che elenca gli schemi XML associati.


Passo 2: Aggiungere o aggiornare una parte personalizzata XML

Chiama CustomXmlPartCollection.Add(id, xml) con una stringa id e il contenuto XML per creare un part direttamente, o costruisci un CustomXmlPart separatamente e passalo a Add(part). Per rimuovere i dati, usa RemoveAt(index) su una posizione specifica o Clear() per eliminare ogni part. Quando copi i dati XML personalizzati tra documenti, usa CustomXmlPart.Clone() (o il Clone() della collezione) sul part di origine invece di rileggerli e riaggiungere il XML grezzo, poi aggiungi il clone al Document.CustomXmlParts del documento di destinazione.


Passo 3: Gestire gli Schemi Associati a un Part

CustomXmlPart.Schemas raggiunge un CustomXmlSchemaCollection, che tiene traccia degli URI degli schemi associati al part come stringhe semplici anziché oggetti schema analizzati. Usa Add(value) per registrare un URI di schema, Remove(name) o RemoveAt(index) per rimuoverne uno, IndexOf(value) per individuarne uno e Clear() per rimuoverli tutti. Count segnala quanti URI di schema sono attualmente associati al part.


Passo 4: Lavorare con i Part Personalizzati a Livello di Pacchetto

Non tutti i part non visibili in un pacchetto OOXML sono XML personalizzati. Document.PackageCustomParts restituisce un CustomPartCollection di oggetti CustomPart — part arbitrari memorizzati nel pacchetto, come part aggiunti da un’altra applicazione che ha modificato il file. Ogni CustomPart ha un Name, un ContentType, un RelationshipType, un array di byte Data e un flag IsExternal che indica se è un riferimento esterno anziché contenuto incorporato. Add(part), RemoveAt(index) e Clear() gestiscono la collezione nello stesso modo di CustomXmlPartCollection. Controlla PackageCustomParts — non CustomXmlParts — quando un part che il tuo documento dovrebbe contenere non appare nella collezione XML personalizzata.


Passo 5: Ispezionare i Tag Smart Legacy e le loro Proprietà

SmartTag è un tipo di nodo (NodeType.SmartTag, costruito con SmartTag(doc)) che rappresenta un tag smart legacy di Word avvolto attorno al testo riconosciuto. Controlla Element e Uri insieme per identificare quale riconoscitore ha creato il tag, poi leggi Properties — un CustomXmlPropertyCollection — per i dati strutturati che il riconoscitore ha allegato. All’interno di un CustomXmlPropertyCollection, l’indicizzatore (ad esempio properties["MyProp"]) o Contains(name) cercano una proprietà specifica, IndexOfKey(name) restituisce la sua posizione, e Remove(name)/RemoveAt(index)/Clear() rimuovono le voci; ogni CustomXmlProperty è costruito con CustomXmlProperty(name, uri, value) ed espone Name, Uri e Value. Poiché SmartTag deriva da CompositeNode, partecipa anche all’albero del documento come gli altri nodi, supportando Accept(visitor), AcceptStart(visitor) e AcceptEnd(visitor) per la traversata basata su DocumentVisitor.


Problemi comuni e soluzioni

CustomXmlPartCollection.GetById(id) non restituisce nulla di utilizzabile. L’ID non corrisponde a nessuna parte attualmente in Document.CustomXmlParts. Elenca la collezione per confermare che l’ID è presente, oppure aggiungi prima la parte con Add(id, xml).

Una parte aggiunta da un’altra applicazione non viene trovata iterando CustomXmlParts. Le parti del pacchetto Non-XML sono esposte tramite Document.PackageCustomParts, non CustomXmlParts. Controlla PackageCustomParts (a CustomPartCollection) invece.

SmartTag.Properties è vuoto anche se il tag è chiaramente presente. Non tutti i riconoscitori di smart tag aggiungono proprietà strutturate. Controlla SmartTag.Element and Uri per confermare quale riconoscitore ha creato il tag prima di presumere che siano presenti proprietà specifiche.

I dati personalizzati XML non sembrano correlati al controllo del contenuto a cui dovrebbero essere associati. I controlli del contenuto si collegano al XML personalizzato tramite la propria configurazione di binding dei dati, non automaticamente a tutti i CustomXmlPart in Document.CustomXmlParts. Conferma a quale parte un dato controllo del contenuto è effettivamente collegato, invece di presumere una relazione uno a uno.


Domande frequenti

Come aggiungo dati personalizzati XML a un documento?

Chiamare Document.CustomXmlParts.Add(id, xml) con una stringa ID e contenuto XML, oppure costruire separatamente un CustomXmlPart e passarlo a Add(part).

Qual è la differenza tra CustomXmlPart e CustomXmlProperty?

CustomXmlPart è un’intera isola di dati XML — un payload di byte-array più gli schemi associati — raggiungibile tramite Document.CustomXmlParts. CustomXmlProperty è una singola coppia nome/valore, tipicamente raggiunta tramite SmartTag.Properties piuttosto che direttamente dal documento.

Come copio i dati XML personalizzati da un documento all’altro?

Chiama Clone() sul CustomXmlPart di origine, quindi aggiungi il clone al Document.CustomXmlParts del documento di destinazione con Add(part).

Che cos’è un SmartTag e quando potrei incontrarne uno?

SmartTag è una funzionalità legacy di Word che rappresenta testo riconosciuto e avvolto da un riconoscitore di smart-tag — un nodo del documento (NodeType.SmartTag) con un Element e Uri che identificano il riconoscitore, più una collezione Properties di valori CustomXmlProperty. Appare nei documenti che sono stati creati o modificati con i smart tag abilitati nelle versioni precedenti di Word.

Come faccio a sapere quante parti XML personalizzate o parti di pacchetto ha un documento?

Leggi Count su Document.CustomXmlParts (un CustomXmlPartCollection) o Document.PackageCustomParts (un CustomPartCollection) rispettivamente.


Vedi anche

 Italiano