Práce s vlastním XML značkováním
Práce s vlastním XML značkováním
Tento průvodce ukazuje, jak číst a spravovat vlastní XML data, která může dokument Word nést vedle svého viditelného obsahu— data používaná k propojení ovládacích prvků obsahu, ukládání metadat specifických pro aplikaci nebo vložení libovolných částí balíčku. Document.CustomXmlParts zpřístupňuje na úrovni dokumentu vlastní XML data a Document.PackageCustomParts zpřístupňuje vlastní části na úrovni balíčku, které nejsou specificky vlastní XML.
Vlastní části XML
CustomXmlPart představuje jeden vlastní XML datový ostrov připojený k dokumentu— stejný mechanismus, který Word používá k podpoře XML-mapovaných ovládacích prvků obsahu. Každá část má Id, Data bajtové pole obsahující surové XML, DataChecksum a vlastnost Schemas (CustomXmlSchemaCollection) uvádějící XML schémata s ní spojená. Document.CustomXmlParts vrací CustomXmlPartCollection: Add(part) připojí existující CustomXmlPart, Add(id, xml) vytvoří jeden přímo z ID a řetězce XML, GetById(id) načte konkrétní část a RemoveAt(index)/Clear() odstraňují části. Jak CustomXmlPart, tak CustomXmlPartCollection zpřístupňují Clone() pro duplikování vlastních XML dat, například při kopírování obsahu mezi dokumenty.
Vlastní schémata XML
CustomXmlSchemaCollection, dosažený přes CustomXmlPart.Schemas, uvádí URI schémat spojených s vlastní částí XML. Podporuje Add(value), Remove(name), RemoveAt(index), IndexOf(value), Clear() a Clone(), spolu s vlastností Count— URI schémat jsou sledovány jako prosté řetězce místo analyzovaných objektů schématu.
Vlastní vlastnosti XML
Odděleně od CustomXmlPart představuje CustomXmlProperty jedinou vlastnost XML typu název/hodnota, vytvořenou pomocí CustomXmlProperty(name, uri, value) a vystavující Name, Uri a Value. CustomXmlPropertyCollection spravuje sadu těchto položek: Add(property) přidá jednu, indexer (např. properties["MyProp"]) ji vyhledá podle názvu a Contains(name) testuje, zda je přítomna, IndexOfKey(name) vrací její pozici a Remove(name)/RemoveAt(index)/Clear() odstraňují položky. SmartTag.Properties vrací CustomXmlPropertyCollection, což je způsob, jakým je strukturovaná data staršího inteligentního tagu reprezentována (viz níže).
Vlastní části na úrovni balíčku
Document.PackageCustomParts vrací CustomPartCollection CustomPart objektů — libovolné části uložené v balíčku OOXML, které nejsou vlastními daty XML, například části přidané jinými aplikacemi, které soubor upravily. Každý CustomPart má Name, ContentType, RelationshipType, pole bajtů Data a příznak IsExternal, který udává, zda je část externí referencí místo vloženého obsahu. Kolekce podporuje Add(part), RemoveAt(index), Clear() a Clone(), spolu s Count.
Staré inteligentní značky
SmartTag je typ uzlu (NodeType.SmartTag) představující starý Word inteligentní tag ovinutý kolem rozpoznaného textu. SmartTag je vytvořen pomocí SmartTag(doc) a vystavuje Element (název elementu rozpoznávače) a Uri (jmenný prostor rozpoznávače), spolu s Properties — CustomXmlPropertyCollection držící strukturovaná data, která rozpoznávač připojil k označenému textu. Protože SmartTag je uzel, podílí se také na stromu dokumentu jako ostatní uzly a podporuje Accept(visitor), AcceptStart(visitor) a AcceptEnd(visitor) pro průchod založený na DocumentVisitor.
MarkupLevel
MarkupLevel je výčet — Unknown, Inline, Block, Row, Cell — popisující strukturální úroveň ve stromu dokumentu, ve které může nastat značkový prvek, jako je strukturovaná značka dokumentu.
Tipy a osvědčené postupy
- Použijte
CustomXmlPartCollection.GetById(id)místo ručního procházení kolekce, když znáte ID požadované části. - Přečtěte
CustomXmlPart.DataChecksum, abyste zjistili, zda se podkladová data XML změnila, aniž byste prováděli úplné porovnání bajtů. - Rozlišujte
Document.CustomXmlParts(vlastní data XML, často svázaná s ovládacími prvky obsahu) odDocument.PackageCustomParts(libovolné ne-XML části balíčku) — mají odlišné účely a jsou uloženy odděleně. - Při práci se staršími dokumenty, které používají chytré značky, zkontrolujte
SmartTag.ElementaUrispolečně, abyste určili, který rozpoznávač vytvořil značku, než se spolehnete na jejíProperties. - Klonujte vlastní části XML pomocí
CustomXmlPart.Clone()(neboClone()kolekce) při kopírování dat mezi dokumenty místo opětovného načítání a přidávání surových XML.
Běžné problémy
| Problém | Příčina | Oprava |
|---|---|---|
CustomXmlPartCollection.GetById(id) nevrací nic použitelného | ID neodpovídá žádné části v současné době v Document.CustomXmlParts | Projděte kolekci, abyste potvrdili ID, nebo nejprve přidejte část pomocí Add(id, xml) |
| Vlastní data XML se zdají být nesouvisející se zobrazitelnými ovládacími prvky obsahu | Ovládací prvky obsahu se vážou na vlastní XML prostřednictvím své vlastní konfigurace datového vazby, nikoli automaticky ke každému CustomXmlPart | Potvrďte, ke které části je daný ovládací prvek obsahu připojen, místo aby se předpokládal vztah 1:1 s Document.CustomXmlParts |
Část balíčku přidaná jinou aplikací nebyla nalezena v CustomXmlParts | Části balíčku, které nejsou XML, jsou zpřístupněny přes Document.PackageCustomParts, nikoli CustomXmlParts | Zkontrolujte PackageCustomParts (a CustomPartCollection) místo toho |
SmartTag.Properties je prázdný | Ne každý rozpoznávač chytrých štítků připojuje strukturované vlastnosti | Zkontrolujte SmartTag.Element/Uri, abyste potvrdili, který rozpoznávač vytvořil štítek, než budete očekávat konkrétní vlastnosti |
FAQ
Jaký je rozdíl mezi CustomXmlPart a CustomXmlProperty?
CustomXmlPart je celý XML datový ostrov (s payloadem ve formě pole bajtů a souvisejícími schématy), dosažitelný přes Document.CustomXmlParts. CustomXmlProperty je jeden pár název/hodnota, typicky dosažitelný přes SmartTag.Properties spíše než přímo z dokumentu.
Jak mohu přidat vlastní XML data do dokumentu?
Zavolejte Document.CustomXmlParts.Add(id, xml) s řetězcem id a obsahem XML, nebo vytvořte CustomXmlPart samostatně a předáte jej Add(part).
Co jsou vlastní části balíčku a jak se liší od vlastních částí XML?
Document.PackageCustomParts (a CustomPartCollection of CustomPart objects) obsahuje libovolné OOXML části balíčku, které nejsou vlastní XML — každá s ContentType, RelationshipType a surovým Data. Document.CustomXmlParts je specificky pro vlastní XML datové ostrovy.
Co je SmartTag?
SmartTag je starší funkce Wordu, která představuje text rozpoznaný a zabalený rozpoznávačem chytrých štítků. Je to uzel dokumentu (NodeType.SmartTag) s Element a Uri identifikujícími rozpoznávač a Properties kolekcí CustomXmlProperty hodnot, které rozpoznávač připojil.
Jak mohu zkopírovat vlastní XML data mezi dokumenty?
Použijte CustomXmlPart.Clone() na zdrojové části, pak přidejte klon do Document.CustomXmlParts cílového dokumentu s Add(part).
API Reference Shrnutí
| Třída/Metoda | Popis: |
|---|---|
CustomXmlPart | Jeden vlastní XML datový ostrov připojený k dokumentu |
Document.CustomXmlParts | CustomXmlPartCollection všech vlastních XML částí v dokumentu |
CustomXmlPartCollection.Add(id, xml) / GetById(id) | Přidat nebo načíst vlastní část XML podle id |
CustomXmlSchemaCollection | URI schémat spojené s CustomXmlPart |
CustomXmlProperty | Jedna vlastnost XML název/hodnota |
CustomXmlPropertyCollection | Kolekce hodnot CustomXmlProperty, např. na SmartTag.Properties |
Document.PackageCustomParts | The CustomPartCollection libovolných ne-XML OOXML balíčkových částí |
CustomPart | Jedna část na úrovni balíčku s Name, ContentType a surovým Data |
SmartTag | Zastaralý typ uzlu obalující text rozpoznaný rozpoznávačem chytrých značek |
MarkupLevel | Enum popisující, kde se může prvek značkování vyskytovat ve stromu dokumentu |