Arbeta med anpassad XML Markup
Arbeta med anpassad XML markup
Den här guiden visar hur man läser och hanterar den anpassade XML-data som ett Word-dokument kan bära tillsammans med sitt synliga innehåll — data som används för att binda innehållskontroller, lagra programspecifik metadata eller bädda in godtyckliga paketdelar. Document.CustomXmlParts exponerar dokumentnivåns anpassade XML-data, och Document.PackageCustomParts exponerar paketnivåns anpassade delar som inte är specifikt anpassade XML.
Anpassade XML delar
CustomXmlPart representerar en anpassad XML dataö som är knuten till dokumentet — samma mekanism som Word använder för att stödja XML-mappade innehållskontroller. Varje del har ett Id, en Data byte-array som innehåller den råa XML, ett DataChecksum, och en Schemas egenskap (en CustomXmlSchemaCollection) som listar de XML-scheman som är associerade med den. Document.CustomXmlParts returnerar en CustomXmlPartCollection: Add(part) bifogar en befintlig CustomXmlPart, Add(id, xml) skapar en direkt från ett id och en XML-sträng, GetById(id) hämtar en specifik del, och RemoveAt(index)/Clear() tar bort delar. Både CustomXmlPart och CustomXmlPartCollection exponerar Clone() för att duplicera anpassad XML data, till exempel när innehåll kopieras mellan dokument.
Anpassade XML scheman
CustomXmlSchemaCollection, nås via CustomXmlPart.Schemas, listar de schema-URIs som är associerade med en anpassad XML del. Den stöder Add(value), Remove(name), RemoveAt(index), IndexOf(value), Clear() och Clone(), tillsammans med en Count egenskap — schema-URIs spåras som vanliga strängar snarare än som parsade schemaobjekt.
Anpassade XML egenskaper
Separat från CustomXmlPart representerar CustomXmlProperty en enskild namn/värde XML egenskap, konstruerad med CustomXmlProperty(name, uri, value) och exponerar Name, Uri och Value. CustomXmlPropertyCollection hanterar en uppsättning av dessa: Add(property) lägger till en, indexeraren (t.ex. properties["MyProp"]) söker upp en efter namn och Contains(name) testar om den finns, IndexOfKey(name) returnerar dess position, och Remove(name)/RemoveAt(index)/Clear() tar bort poster. SmartTag.Properties returnerar en CustomXmlPropertyCollection, vilket är hur en legacy smart tag’s strukturerade data representeras (se nedan).
Användningsnivå anpassade delar
Document.PackageCustomParts returnerar en CustomPartCollection av CustomPart objekt — godtyckliga delar lagrade i OOXML-paketet som inte är anpassade XML data, såsom delar som lagts till av andra program som har rört filen. Varje CustomPart har en Name, ContentType, RelationshipType, en Data byte-array och en IsExternal flagga som indikerar om delen är en extern referens snarare än inbäddat innehåll. Samlingen stöder Add(part), RemoveAt(index), Clear() och Clone(), tillsammans med Count.
Äldre Smart-taggar
SmartTag är en nodtyp (NodeType.SmartTag) som representerar en legacy Word smart tag omsluten runt igenkänd text. En SmartTag konstrueras med SmartTag(doc) och exponerar Element (namnet på igenkännarelementet) och Uri (igenkännarens namnrymd), tillsammans med Properties — en CustomXmlPropertyCollection som innehåller den strukturerade data som igenkännaren fäste på den taggade texten. Eftersom SmartTag är en nod deltar den också i dokumentträdet likt andra noder, och stödjer Accept(visitor), AcceptStart(visitor) och AcceptEnd(visitor) för DocumentVisitor-baserad traversering.
MarkupLevel
MarkupLevel är en enum — Unknown, Inline, Block, Row, Cell — som beskriver den strukturella nivån i dokumentträdet där ett markup-element, såsom en strukturerad dokumenttagg, kan förekomma.
Tips och bästa praxis
- Använd
CustomXmlPartCollection.GetById(id)snarare än att iterera samlingen manuellt när du känner till id för den del du behöver. - Läs
CustomXmlPart.DataChecksumför att upptäcka om den underliggande XML-datan har förändrats utan att göra en fullständig byte-jämförelse. - Skilj mellan
Document.CustomXmlParts(anpassad XML-data, ofta knuten till innehållskontroller) ochDocument.PackageCustomParts(godtyckliga icke-XML-paketdelar) — de har olika syften och lagras separat. - När du arbetar med äldre dokument som använder smarta taggar, kontrollera
SmartTag.ElementochUritillsammans för att identifiera vilken igenkännare som skapade taggen innan du förlitar dig på dessProperties. - Klona anpassade XML-delar med
CustomXmlPart.Clone()(eller samlingensClone()) när du kopierar data mellan dokument istället för att läsa om och återlägga den råa XML.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
CustomXmlPartCollection.GetById(id) returnerar inget användbart | id matchar inte någon del som för närvarande finns i Document.CustomXmlParts | Enumerera samlingen för att bekräfta id:t, eller lägg till delen först med Add(id, xml) |
| Anpassade XML-data verkar inte vara relaterade till synliga innehållskontroller | Innehållskontroller bindar till anpassad XML via deras egen databindningskonfiguration, inte automatiskt till varje CustomXmlPart | Bekräfta vilken del en given innehållskontroll är bunden till snarare än att anta ett 1:1-förhållande med Document.CustomXmlParts |
En paketdel som lagts till av en annan applikation hittas inte i CustomXmlParts | Icke-XML paketdelar exponeras via Document.PackageCustomParts, inte CustomXmlParts | Kontrollera PackageCustomParts (en CustomPartCollection) istället |
SmartTag.Properties är tom | Inte varje smart tag-igenkännare bifogar strukturerade egenskaper | Kontrollera SmartTag.Element/Uri för att bekräfta vilken igenkännare som skapade taggen innan du förväntar dig specifika egenskaper |
FAQ
Vad är skillnaden mellan CustomXmlPart och CustomXmlProperty?
CustomXmlPart är en hel XML data island (med en byte-array payload och tillhörande scheman), nås via Document.CustomXmlParts. CustomXmlProperty är ett enskilt namn/värde-par, vanligtvis nått via SmartTag.Properties snarare än direkt från dokumentet.
Hur lägger jag till anpassad XML data i ett dokument?
Anropa Document.CustomXmlParts.Add(id, xml) med en id-sträng och det XML-innehållet, eller konstruera en CustomXmlPart separat och skicka den till Add(part).
Vad är paket-anpassade delar, och hur skiljer de sig från anpassade XML delar?
Document.PackageCustomParts (en CustomPartCollection av CustomPart objekt) innehåller godtyckliga OOXML-paketdelar som inte är anpassade XML — varje med en ContentType, RelationshipType och rå Data. Document.CustomXmlParts är specifikt för anpassade XML-data islands.
Vad är en SmartTag?
SmartTag är en äldre Word-funktion som representerar text som identifieras och omsluts av en smart-tag recognizer. Det är en dokumentnod (NodeType.SmartTag) med ett Element och Uri som identifierar igenkännaren, samt en Properties samling av CustomXmlProperty-värden som igenkännaren har bifogat.
Hur kopierar jag anpassad XML-data mellan dokument?
Använd CustomXmlPart.Clone() på källdelen, lägg sedan till klonen i måldokumentets Document.CustomXmlParts med Add(part).
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
CustomXmlPart | En enstaka anpassad XML dataö bifogad till ett dokument |
Document.CustomXmlParts | Den CustomXmlPartCollection för alla anpassade XML delar i ett dokument |
CustomXmlPartCollection.Add(id, xml) / GetById(id) | Lägg till eller hämta en anpassad XML del efter id |
CustomXmlSchemaCollection | Schema-URI:er associerade med en CustomXmlPart |
CustomXmlProperty | En enda namn/värde XML egenskap |
CustomXmlPropertyCollection | En samling av CustomXmlProperty-värden, t.ex. på SmartTag.Properties |
Document.PackageCustomParts | Den CustomPartCollection för godtyckliga icke-XML OOXML-paketdelar |
CustomPart | En anpassad del på paketnivå med Name, ContentType och rå Data |
SmartTag | Legacy-nodtyp som omsluter text som känns igen av en smart-tag-identifierare |
MarkupLevel | Enum som beskriver var ett markup-element kan förekomma i dokumentträdet |