Jak pracovat s vlastním XML značkováním v .NET

Jak pracovat s vlastním XML značkováním v .NET

Jak pracovat s vlastním značkováním XML v .NET

Word dokument může nést vlastní data XML vedle svého viditelného obsahu — data používaná k propojení ovládacích prvků obsahu, uložení specifických metadat aplikace nebo vložení částí přidaných jinou aplikací. Tento průvodce ukazuje, jak číst tato data, přidávat nové vlastní části XML a zkoumat starší inteligentní značky, které starší dokumenty mohou stále obsahovat, pomocí CustomXmlPart, CustomXmlProperty a SmartTag v Aspose.Words FOSS pro .NET.


Průvodce krok po kroku

Krok 1: Načíst vlastní data XML z dokumentu

Document.CustomXmlParts vrací CustomXmlPartCollection — stejný mechanismus, který Word používá k podpoře XML-mapovaných ovládacích prvků obsahu. Procházejte kolekci nebo zavolejte GetById(id), pokud již víte, kterou část potřebujete, a získáte CustomXmlPart. Každá část odhaluje Id, Data pole bajtů obsahující surové XML, DataChecksum pro detekci, zda se data změnila, aniž by bylo nutné provádět úplné porovnání bajtů, a Schemas — CustomXmlSchemaCollection výpis XML schémat s ní spojených.


Krok 2: Přidat nebo aktualizovat vlastní část XML

Zavolejte CustomXmlPartCollection.Add(id, xml) s řetězcem id a obsahem XML pro přímé vytvoření části, nebo samostatně vytvořte CustomXmlPart a předáte jej do Add(part). Pro odstranění dat použijte RemoveAt(index) na konkrétní pozici nebo Clear() pro vynechání každé části. Při kopírování vlastních dat XML mezi dokumenty použijte CustomXmlPart.Clone() (nebo Clone() kolekce) na zdrojové části místo opětovného načtení a přidání surových XML, poté přidejte klon do Document.CustomXmlParts cílového dokumentu.


Krok 3: Spravujte schémata spojená s částí

CustomXmlPart.Schemas dosáhne CustomXmlSchemaCollection, který sleduje URI schémat spojených s částí jako obyčejné řetězce namísto parsovaných objektů schématu. Použijte Add(value) k registraci URI schématu, Remove(name) nebo RemoveAt(index) k jeho odstranění, IndexOf(value) k jeho vyhledání a Clear() k odstranění všech. Count hlásí, kolik URI schémat je v současnosti s částí spojeno.


Krok 4: Pracujte s vlastním částmi na úrovni balíčku

Ne každá neviditelná část v balíčku OOXML je vlastní XML. Document.PackageCustomParts vrací CustomPartCollection objektů CustomPart — libovolné části uložené v balíčku, například části přidané jinou aplikací, která soubor upravila. Každý CustomPart má Name, ContentType, RelationshipType, pole bajtů Data a příznak IsExternal, který označuje, zda se jedná o externí odkaz místo vloženého obsahu. Add(part), RemoveAt(index) a Clear() spravují kolekci stejným způsobem jako CustomXmlPartCollection. Zkontrolujte PackageCustomParts — nikoli CustomXmlParts — když část, kterou by váš dokument měl obsahovat, se neobjevuje ve vlastní kolekci XML.


Krok 5: Prozkoumejte staré inteligentní značky a jejich vlastnosti

SmartTag je typ uzlu (NodeType.SmartTag, vytvořený pomocí SmartTag(doc)) představující starou inteligentní značku Wordu obalenou kolem rozpoznaného textu. Zkontrolujte Element a Uri společně, abyste určili, který rozpoznávač značku vytvořil, pak přečtěte Properties — CustomXmlPropertyCollection — pro strukturovaná data, která rozpoznávač připojil. V rámci CustomXmlPropertyCollection indexer (např. properties["MyProp"]) nebo Contains(name) vyhledají konkrétní vlastnost, IndexOfKey(name) vrátí její pozici a Remove(name)/RemoveAt(index)/Clear() odstraňují položky; každý CustomXmlProperty je vytvořen pomocí CustomXmlProperty(name, uri, value) a vystavuje Name, Uri a Value. Protože SmartTag dědí z CompositeNode, účastní se také stromu dokumentu jako ostatní uzly, podporuje Accept(visitor), AcceptStart(visitor) a AcceptEnd(visitor) pro DocumentVisitor-založenou procházení.


Běžné problémy a opravy

CustomXmlPartCollection.GetById(id) nevrací nic použitelného. ID neodpovídá žádné části, která je momentálně v Document.CustomXmlParts. Projděte kolekci, abyste potvrdili, že ID je přítomno, nebo nejprve přidejte část pomocí Add(id, xml).

Část přidaná jinou aplikací není nalezena iterací 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ý, i když je značka jasně přítomna. Ne každý rozpoznávač chytrých značek připojuje strukturované vlastnosti. Zkontrolujte SmartTag.Element and Uri pro potvrzení, který rozpoznávač vytvořil značku, než předpokládáte, že budou přítomny konkrétní vlastnosti.

Vlastní data XML se nezdají souviset s ovládacím prvkem obsahu, ke kterému by měla být svázána. Ovládací prvky obsahu jsou svázány s vlastními XML prostřednictvím své vlastní konfigurace datového vazby, nikoli automaticky ke každému CustomXmlPart in Document.CustomXmlParts. Potvrďte, ke které části je daný ovládací prvek obsahu skutečně svázán, místo předpokládání vztahu jedna ku jedné.


Často kladené otázky

Jak přidám vlastní data XML do dokumentu?

Volání Document.CustomXmlParts.Add(id, xml) s řetězcem ID a obsahem XML, nebo samostatně vytvořte CustomXmlPart a předajte jej Add(part).

Jaký je rozdíl mezi CustomXmlPart a CustomXmlProperty?

CustomXmlPart je celý XML datový ostrov — payload v podobě pole bajtů a související schémata — přístupný přes Document.CustomXmlParts. CustomXmlProperty je jediný pár název/hodnota, typicky získávaný přes SmartTag.Properties spíše než přímo z dokumentu.

Jak mohu zkopírovat vlastní XML data z jednoho dokumentu do druhého?

Zavolejte Clone() na zdrojovém CustomXmlPart, poté přidejte klon do Document.CustomXmlParts cílového dokumentu pomocí Add(part).

Co je SmartTag a kdy bych s ním mohl/a setkat?

SmartTag je starší funkce Wordu představující text rozpoznaný a obalený rozpoznávačem chytrých značek — uzel dokumentu (NodeType.SmartTag) s Element a Uri identifikujícími rozpoznávač, plus Properties kolekce CustomXmlProperty hodnot. Objevuje se v dokumentech, které byly vytvořeny nebo upraveny se zapnutými chytrými značkami ve starších verzích Wordu.

Jak zjistím, kolik má dokument vlastních XML částí nebo částí balíčku?

Přečtěte Count na Document.CustomXmlParts (a CustomXmlPartCollection) nebo Document.PackageCustomParts (a CustomPartCollection) příslušně.


Viz také:

 Čeština