Hoe te werken met aangepaste XML markup in .NET

Hoe te werken met aangepaste XML markup in .NET

Hoe te werken met aangepaste XML markup in .NET

Een Word-document kan aangepaste XML-gegevens bevatten naast de zichtbare inhoud — gegevens die worden gebruikt om content-controls te binden, toepassingsspecifieke metadata op te slaan, of onderdelen in te sluiten die door een andere toepassing zijn toegevoegd. Deze gids laat zien hoe die gegevens te lezen, nieuwe aangepaste XML-onderdelen toe te voegen en de oude smart tags te inspecteren die in oudere documenten nog aanwezig kunnen zijn, met behulp van CustomXmlPart, CustomXmlProperty en SmartTag in Aspose.Words FOSS voor .NET.


Stap-voor-stap gids

Stap 1: Lees aangepaste XML-gegevens uit een document

Document.CustomXmlParts retourneert een CustomXmlPartCollection — hetzelfde mechanisme dat Word gebruikt om XML-toegewezen content-controls te ondersteunen. Doorloop de collectie, of roep GetById(id) aan wanneer je al weet welk onderdeel je nodig hebt, om een CustomXmlPart te krijgen. Elk onderdeel biedt Id, een Data byte-array met de ruwe XML, een DataChecksum om te detecteren of de gegevens zijn veranderd zonder een volledige byte-vergelijking, en Schemas — een CustomXmlSchemaCollection met een opsomming van de XML-schema’s die eraan gekoppeld zijn.


Stap 2: Voeg een aangepast XML-onderdeel toe of werk het bij

Roep CustomXmlPartCollection.Add(id, xml) aan met een id-string en de XML-inhoud om direct een onderdeel te maken, of bouw een CustomXmlPart apart en geef die door aan Add(part). Om gegevens te verwijderen, gebruik RemoveAt(index) op een specifieke positie of Clear() om elk onderdeel te laten vallen. Bij het kopiëren van aangepaste XML-gegevens tussen documenten, gebruik CustomXmlPart.Clone() (of de collectie’s Clone()) op het brononderdeel in plaats van de ruwe XML opnieuw te lezen en toe te voegen, en voeg vervolgens de kloon toe aan de Document.CustomXmlParts van het doeldocument.


Stap 3: Beheer de schema’s die aan een onderdeel zijn gekoppeld

CustomXmlPart.Schemas bereikt een CustomXmlSchemaCollection, die de schema-URI’s die aan het onderdeel zijn gekoppeld bijhoudt als platte strings in plaats van geparseerde schema-objecten. Gebruik Add(value) om een schema-URI te registreren, Remove(name) of RemoveAt(index) om er één te verwijderen, IndexOf(value) om er één te vinden, en Clear() om ze allemaal te verwijderen. Count meldt hoeveel schema-URI’s momenteel aan het onderdeel zijn gekoppeld.


Stap 4: Werken met pakket-niveau aangepaste onderdelen

Niet elk niet-zichtbare onderdeel in een OOXML-pakket is een custom XML. Document.PackageCustomParts retourneert een CustomPartCollection van CustomPart-objecten — willekeurige onderdelen die in het pakket zijn opgeslagen, zoals onderdelen die door een andere toepassing zijn toegevoegd die het bestand heeft bewerkt. Elk CustomPart heeft een Name, ContentType, RelationshipType, een Data-byte-array en een IsExternal-vlag die aangeeft of het een externe referentie is in plaats van ingebedde inhoud. Add(part), RemoveAt(index) en Clear() beheren de collectie op dezelfde manier als CustomXmlPartCollection. Controleer PackageCustomParts — niet CustomXmlParts — wanneer een onderdeel dat uw document zou moeten bevatten niet verschijnt in de custom XML-collectie.


Stap 5: Inspecteer legacy smart tags en hun eigenschappen

SmartTag is een knooptype (NodeType.SmartTag, geconstrueerd met SmartTag(doc)) dat een legacy Word-smart-tag vertegenwoordigt die rond herkende tekst is gewikkeld. Controleer Element en Uri samen om te identificeren welke recognizer de tag heeft gemaakt, lees vervolgens Properties — een CustomXmlPropertyCollection — voor de gestructureerde gegevens die de recognizer heeft toegevoegd. Binnen een CustomXmlPropertyCollection zoekt de indexer (bijv. properties["MyProp"]) of Contains(name) een specifieke eigenschap op, IndexOfKey(name) geeft de positie terug, en Remove(name)/RemoveAt(index)/Clear() verwijderen items; elke CustomXmlProperty wordt geconstrueerd met CustomXmlProperty(name, uri, value) en exposeert Name, Uri en Value. Omdat SmartTag afgeleid is van CompositeNode, neemt het ook deel in de documentboom zoals andere knooppunten, en ondersteunt het Accept(visitor), AcceptStart(visitor) en AcceptEnd(visitor) voor DocumentVisitor-gebaseerde traversie.


Algemene problemen en oplossingen

CustomXmlPartCollection.GetById(id) geeft niets bruikbaars terug. De id komt niet overeen met een onderdeel dat momenteel in Document.CustomXmlParts. Door de collectie te enumereren kun je bevestigen dat de id aanwezig is, of voeg het onderdeel eerst toe met Add(id, xml).

Een onderdeel dat door een andere applicatie is toegevoegd, wordt niet gevonden door te itereren CustomXmlParts. Niet-XML pakketonderdelen worden blootgesteld via Document.PackageCustomParts, niet CustomXmlParts. Controleer PackageCustomParts (a CustomPartCollection) in plaats daarvan.

SmartTag.Properties is leeg, ook al is de tag duidelijk aanwezig. Niet elke smart tag-ontvanger koppelt gestructureerde eigenschappen. Controleer SmartTag.Element and Uri om te bevestigen welke ontvanger de tag heeft aangemaakt voordat u ervan uitgaat dat specifieke eigenschappen aanwezig zullen zijn.

Aangepaste XML-gegevens lijken niet gerelateerd te zijn aan de inhoudsbesturingselement waaraan ze gekoppeld zouden moeten worden. Inhoudsbesturingselementen binden aan aangepaste XML via hun eigen data-binding configuratie, niet automatisch aan elke CustomXmlPart in Document.CustomXmlParts. Bevestig welk deel van een gegeven inhoudsbesturingselement daadwerkelijk is gekoppeld in plaats van uit te gaan van een één-op-één relatie.


Veelgestelde vragen

Hoe voeg ik aangepaste XML-gegevens toe aan een document?

Roep Document.CustomXmlParts.Add(id, xml) aan met een id-string en XML-inhoud, of bouw een CustomXmlPart apart en geef deze door aan Add(part).

Wat is het verschil tussen CustomXmlPart en CustomXmlProperty?

CustomXmlPart is een volledige XML gegevens-eiland — een byte-array payload plus bijbehorende schemas — bereikbaar via Document.CustomXmlParts. CustomXmlProperty is een enkel naam/waarde-paar, meestal bereikbaar via SmartTag.Properties in plaats van rechtstreeks uit het document.

Hoe kopieer ik aangepaste XML data van het ene document naar het andere?

Roep Clone() aan op de bron CustomXmlPart, voeg vervolgens de kloon toe aan de Document.CustomXmlParts van het doel-document met Add(part).

Wat is een SmartTag en wanneer zou ik er één tegenkomen?

SmartTag is een legacy Word-functie die tekst vertegenwoordigt die wordt herkend en ingepakt door een smart-tag-herkenner — een documentknooppunt (NodeType.SmartTag) met een Element en Uri die de herkenner identificeren, plus een Properties collectie van CustomXmlProperty waarden. Het verschijnt in documenten die zijn gemaakt of bewerkt met smart tags ingeschakeld in oudere Word-versies.

Hoe weet ik hoeveel aangepaste XML onderdelen of package-onderdelen een document heeft?

Lees Count op Document.CustomXmlParts (een CustomXmlPartCollection) of Document.PackageCustomParts (een CustomPartCollection) respectievelijk.


Zie ook

 Nederlands