Jak pracować z niestandardowym znaczkiem XML w .NET

Jak pracować z niestandardowym znaczkiem XML w .NET

Jak pracować z niestandardowym znacznikowaniem XML w .NET

Dokument Word może zawierać niestandardowe dane XML obok widocznej treści — dane używane do powiązania kontrolek treści, przechowywania metadanych specyficznych dla aplikacji lub osadzania części dodanych przez inną aplikację. Ten przewodnik pokazuje, jak odczytać te dane, dodać nowe niestandardowe części XML oraz sprawdzić starsze inteligentne znaczniki, które mogą nadal występować w starszych dokumentach, używając CustomXmlPart, CustomXmlProperty i SmartTag w Aspose.Words FOSS dla .NET.


Przewodnik krok po kroku

Krok 1: Odczytaj niestandardowe dane XML z dokumentu

Document.CustomXmlParts zwraca CustomXmlPartCollection — ten sam mechanizm, którego Word używa do obsługi kontrolek treści mapowanych na XML. Iteruj kolekcję lub wywołaj GetById(id), gdy już wiesz, której części potrzebujesz, aby uzyskać CustomXmlPart. Każda część udostępnia Id, tablicę bajtów Data zawierającą surowe XML, DataChecksum służącą do wykrywania, czy dane uległy zmianie bez pełnego porównania bajtów, oraz Schemas — CustomXmlSchemaCollection wymieniające schematy XML z nią powiązane.


Krok 2: Dodaj lub zaktualizuj niestandardową część XML

Wywołaj CustomXmlPartCollection.Add(id, xml) z ciągiem identyfikatora i zawartością XML, aby utworzyć część bezpośrednio, lub skonstruuj CustomXmlPart osobno i przekaż go do Add(part). Aby usunąć dane, użyj RemoveAt(index) na określonej pozycji lub Clear(), aby usunąć każdą część. Przy kopiowaniu niestandardowych danych XML między dokumentami, użyj CustomXmlPart.Clone() (lub kolekcji Clone()) na części źródłowej zamiast ponownego odczytu i ponownego dodania surowych XML, a następnie dodaj klon do Document.CustomXmlParts dokumentu docelowego.


Krok 3: Zarządzaj schematami powiązanymi z częścią

CustomXmlPart.Schemas osiąga CustomXmlSchemaCollection, który śledzi URI schematów powiązane z częścią jako zwykłe ciągi znaków, a nie jako zparsowane obiekty schematu. Użyj Add(value), aby zarejestrować URI schematu, Remove(name) lub RemoveAt(index), aby usunąć jeden, IndexOf(value), aby go znaleźć, oraz Clear(), aby usunąć je wszystkie. Count informuje, ile URI schematów jest obecnie powiązanych z częścią.


Krok 4: Pracuj z niestandardowymi częściami na poziomie pakietu

Nie każda niewidoczna część w pakiecie OOXML jest niestandardowym XML. Document.PackageCustomParts zwraca CustomPartCollection obiektów CustomPart — dowolne części przechowywane w pakiecie, takie jak części dodane przez inną aplikację, która zmodyfikowała plik. Każdy CustomPart posiada Name, ContentType, RelationshipType, tablicę bajtów Data oraz flagę IsExternal wskazującą, czy jest to odwołanie zewnętrzne, a nie osadzona zawartość. Add(part), RemoveAt(index) i Clear() zarządzają kolekcją w ten sam sposób co CustomXmlPartCollection. Sprawdź PackageCustomParts — nie CustomXmlParts — gdy część, którą dokument powinien zawierać, nie pojawia się w kolekcji niestandardowych XML.


Krok 5: Sprawdź starsze inteligentne znaczniki i ich właściwości

SmartTag jest typem węzła (NodeType.SmartTag, skonstruowanym przy użyciu SmartTag(doc)) reprezentującym starszy inteligentny znacznik Word otaczający rozpoznany tekst. Sprawdź razem Element i Uri, aby zidentyfikować, który rozpoznawacz utworzył znacznik, a następnie odczytaj Properties — CustomXmlPropertyCollection — zawierający strukturalne dane dołączone przez rozpoznawacz. W obrębie CustomXmlPropertyCollection, indeksator (np. properties["MyProp"]) lub Contains(name) wyszukują określoną właściwość, IndexOfKey(name) zwraca jej pozycję, a Remove(name)/RemoveAt(index)/Clear() usuwają wpisy; każdy CustomXmlProperty jest konstruowany z CustomXmlProperty(name, uri, value) i udostępnia Name, Uri oraz Value. Ponieważ SmartTag dziedziczy po CompositeNode, uczestniczy także w drzewie dokumentu jak inne węzły, obsługując Accept(visitor), AcceptStart(visitor) i AcceptEnd(visitor) dla przechodzenia opartego na DocumentVisitor.


Typowe problemy i rozwiązania

CustomXmlPartCollection.GetById(id) zwraca nic użytecznego. Id nie pasuje do żadnej części aktualnie w Document.CustomXmlParts. Wylicz kolekcję, aby potwierdzić, że id jest obecny, lub najpierw dodaj część przy użyciu Add(id, xml).

Część dodana przez inną aplikację nie jest znajdowana podczas iteracji CustomXmlParts. Części pakietu nie-XML są udostępniane przez Document.PackageCustomParts, nie CustomXmlParts. Sprawdź PackageCustomParts (a CustomPartCollection) zamiast.

SmartTag.Properties jest pusty, mimo że znacznik jest wyraźnie obecny. Nie każdy rozpoznawacz inteligentnych znaczników dołącza właściwości strukturalne. Sprawdź SmartTag.Element and Uri aby potwierdzić, który rozpoznawacz utworzył znacznik, zanim założysz, że konkretne właściwości będą obecne.

Dane niestandardowe XML nie wydają się powiązane z kontrolą treści, do której powinny być związane. Kontrole treści wiążą się z niestandardowym XML za pośrednictwem własnej konfiguracji wiązania danych, a nie automatycznie ze wszystkimi CustomXmlPart in Document.CustomXmlParts. Potwierdź, do której części dana kontrola treści jest faktycznie związana, zamiast zakładać relację jeden do jednego.


Najczęściej zadawane pytania

Jak dodać niestandardowe dane XML do dokumentu?

Wywołaj Document.CustomXmlParts.Add(id, xml) z ciągiem identyfikatora i zawartością XML, lub skonstruuj osobno CustomXmlPart i przekaż go do Add(part).

Jaka jest różnica między CustomXmlPart a CustomXmlProperty?

CustomXmlPart jest całym wyspą danych XML — ładunkiem bajtowym plus powiązane schematy — dostępna przez Document.CustomXmlParts. CustomXmlProperty jest pojedynczą parą nazwa/wartość, zazwyczaj dostępna przez SmartTag.Properties zamiast bezpośrednio z dokumentu.

Jak skopiować niestandardowe dane XML z jednego dokumentu do drugiego?

Wywołaj Clone() na źródłowym CustomXmlPart, a następnie dodaj klon do Document.CustomXmlParts dokumentu docelowego przy użyciu Add(part).

Czym jest SmartTag i kiedy mogę go napotkać?

SmartTag jest starszą funkcją Worda reprezentującą tekst rozpoznany i otoczony przez rozpoznawacz smart-tagów — węzeł dokumentu (NodeType.SmartTag) z Element i Uri identyfikującymi rozpoznawacz, plus kolekcją Properties wartości CustomXmlProperty. Pojawia się w dokumentach, które zostały stworzone lub edytowane z włączonymi smart tagami w starszych wersjach Worda.

Jak mogę sprawdzić, ile niestandardowych części XML lub części pakietu zawiera dokument?

Odczytaj Count na Document.CustomXmlParts (a CustomXmlPartCollection) lub Document.PackageCustomParts (a CustomPartCollection) odpowiednio.


Zobacz także

 Polski