Hur man arbetar med anpassad XML markup i .NET
Hur man arbetar med anpassad XML markup i .NET
Ett Word-dokument kan innehålla anpassad XML-data tillsammans med sitt synliga innehåll — data som används för att binda innehållskontroller, lagra programspecifik metadata eller bädda in delar som lagts till av ett annat program. Den här guiden visar hur man läser den datan, lägger till nya anpassade XML-delar och granskar de äldre smarta taggarna som äldre dokument fortfarande kan innehålla, med hjälp av CustomXmlPart, CustomXmlProperty och SmartTag i Aspose.Words FOSS för .NET.
Steg-för-steg-guide
Steg 1: Läs anpassad XML-data från ett dokument
Document.CustomXmlParts returnerar en CustomXmlPartCollection — samma mekanism som Word använder för att stödja XML-mappade innehållskontroller. Iterera samlingen, eller anropa GetById(id) när du redan vet vilken del du behöver, för att få en CustomXmlPart. Varje del exponerar Id, en Data byte-array som innehåller den råa XML, en DataChecksum för att upptäcka om datan har förändrats utan en full byte-jämförelse, och Schemas — en CustomXmlSchemaCollection som listar de XML-scheman som är associerade med den.
Steg 2: Lägg till eller uppdatera en anpassad XML-del
Anropa CustomXmlPartCollection.Add(id, xml) med en id-sträng och XML-innehållet för att skapa en del direkt, eller konstruera en CustomXmlPart separat och skicka den till Add(part). För att ta bort data, använd RemoveAt(index) på en specifik position eller Clear() för att ta bort varje del. När du kopierar anpassad XML-data mellan dokument, använd CustomXmlPart.Clone() (eller samlingens Clone()) på källdelen istället för att läsa om och lägga till den råa XML, lägg sedan till klonen i mål dokumentets Document.CustomXmlParts.
Steg 3: Hantera scheman som är associerade med en del
CustomXmlPart.Schemas når en CustomXmlSchemaCollection, som spårar schema-URI:er som är associerade med delen som enkla strängar snarare än analyserade schemaobjekt. Använd Add(value) för att registrera en schema-URI, Remove(name) eller RemoveAt(index) för att ta bort en, IndexOf(value) för att hitta en, och Clear() för att ta bort dem alla. Count rapporterar hur många schema-URI:er som för närvarande är associerade med delen.
Steg 4: Arbeta med paketnivåanpassade delar
Inte varje icke-synlig del i ett OOXML-paket är en anpassad XML. Document.PackageCustomParts returnerar en CustomPartCollection av CustomPart-objekt — godtyckliga delar som lagras i paketet, såsom delar som lagts till av ett annat program som har rört filen. Varje CustomPart har en Name, ContentType, RelationshipType, en Data byte-array och en IsExternal flagga som indikerar om det är en extern referens snarare än inbäddat innehåll. Add(part), RemoveAt(index) och Clear() hanterar samlingen på samma sätt som CustomXmlPartCollection. Kontrollera PackageCustomParts — inte CustomXmlParts — när en del som ditt dokument bör innehålla inte visas i den anpassade XML-samlingen.
Steg 5: Inspektera äldre smarta taggar och deras egenskaper
SmartTag är en nodtyp (NodeType.SmartTag, konstruerad med SmartTag(doc)) som representerar en äldre Word smart tag omsluten runt igenkänd text. Kontrollera Element och Uri tillsammans för att identifiera vilken igenkännare som skapade taggen, läs sedan Properties — en CustomXmlPropertyCollection — för den strukturerade data som igenkännaren bifogade. Inom en CustomXmlPropertyCollection letar indexeraren (t.ex. properties["MyProp"]) eller Contains(name) upp en specifik egenskap, IndexOfKey(name) returnerar dess position, och Remove(name)/RemoveAt(index)/Clear() tar bort poster; varje CustomXmlProperty konstrueras med CustomXmlProperty(name, uri, value) och exponerar Name, Uri och Value. Eftersom SmartTag ärver från CompositeNode deltar den också i dokumentträdet som andra noder, och stödjer Accept(visitor), AcceptStart(visitor) och AcceptEnd(visitor) för DocumentVisitor-baserad traversal.
Vanliga problem och lösningar
CustomXmlPartCollection.GetById(id) returnerar inget användbart. ID:t matchar ingen del som för närvarande finns i Document.CustomXmlParts. Enumerera samlingen för att bekräfta att ID:t är närvarande, eller lägg till delen först med Add(id, xml).
En del som lagts till av ett annat program hittas inte genom att iterera CustomXmlParts. Icke-XML paketdelar exponeras via Document.PackageCustomParts, inte CustomXmlParts. Kontrollera PackageCustomParts (a CustomPartCollection) istället.
SmartTag.Properties är tom även om taggen tydligt finns. Inte varje smart tag-igenkännare bifogar strukturerade egenskaper. Kontrollera SmartTag.Element and Uri för att bekräfta vilken igenkännare som skapade taggen innan du antar att specifika egenskaper kommer att finnas.
Anpassad XML-data verkar inte vara relaterad till innehållskontrollen den ska bindas till. Innehållskontroller binder till anpassad XML via sin egen datakopplingskonfiguration, inte automatiskt till varje CustomXmlPart in Document.CustomXmlParts. Bekräfta vilken del en given innehållskontroll faktiskt är bunden till snarare än att anta ett en-till-ett-förhållande.
Vanliga frågor
Hur lägger jag till anpassad XML-data i ett dokument?
Anropa Document.CustomXmlParts.Add(id, xml) med en ID-sträng och XML-innehåll, eller konstruera ett CustomXmlPart separat och skicka det till Add(part).
Vad är skillnaden mellan CustomXmlPart och CustomXmlProperty?
CustomXmlPart är en hel XML datainsel — en byte-array payload plus associerade 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 kopierar jag anpassade XML data från ett dokument till ett annat?
Anropa Clone() på källdokumentet CustomXmlPart, lägg sedan till klonen i mål dokumentets Document.CustomXmlParts med Add(part).
Vad är en SmartTag, och när skulle jag stöta på en?
SmartTag är en äldre Word-funktion som representerar text som identifierats och omslutits av en smart-tag-igenkännare — en dokumentnod (NodeType.SmartTag) med en Element och Uri som identifierar igenkännaren, samt en Properties samling av CustomXmlProperty värden. Den dyker upp i dokument som skapats eller redigerats med smarta taggar aktiverade i äldre Word-versioner.
Hur vet jag hur många anpassade XML delar eller paketdelar ett dokument har?
Läs Count på Document.CustomXmlParts (en CustomXmlPartCollection) eller Document.PackageCustomParts (en CustomPartCollection) respektive.