Özel XML İşaretlemesiyle Çalışma
Özel XML İşaretleme ile Çalışma
Bu kılavuz, bir Word belgesinin görünen içeriğinin yanı sıra taşıyabileceği özel XML verilerini nasıl okuyup yöneteceğinizi gösterir — içerik denetimlerini bağlamak, uygulamaya özgü üst verileri depolamak veya rastgele paket bölümleri eklemek için kullanılan veriler. Document.CustomXmlParts, belge düzeyinde özel XML verilerini ortaya çıkarır ve Document.PackageCustomParts, özel XML olarak özellikle tanımlanmamış paket düzeyinde özel bölümleri ortaya çıkarır.
Özel XML Bölümler
CustomXmlPart, belgeye eklenmiş bir özel XML veri adasını temsil eder — Word’ün XML eşlenmiş içerik denetimlerini desteklemek için kullandığı aynı mekanizma. Her bölüm bir Id, ham XML’yi tutan bir Data bayt dizisi, bir DataChecksum ve ona bağlı XML şemalarını listeleyen bir Schemas özelliği (bir CustomXmlSchemaCollection) içerir. Document.CustomXmlParts, bir CustomXmlPartCollection döndürür: Add(part), mevcut bir CustomXmlPart‘yi ekler, Add(id, xml), bir kimlik ve XML dizesinden doğrudan bir tane oluşturur, GetById(id) belirli bir bölümü alır ve RemoveAt(index)/Clear() bölümleri kaldırır. Hem CustomXmlPart hem de CustomXmlPartCollection, örneğin belgeler arasında içerik kopyalarken özel XML verilerini çoğaltmak için Clone()‘yı ortaya çıkarır.
Özel XML Şemaları
CustomXmlSchemaCollection, CustomXmlPart.Schemas aracılığıyla erişilen, özel XML bir bölümle ilişkili şema URI’lerini listeler. Add(value), Remove(name), RemoveAt(index), IndexOf(value), Clear() ve Clone() desteklenir, ayrıca bir Count özelliği bulunur — şema URI’leri ayrıştırılmış şema nesneleri yerine düz metin dizeleri olarak izlenir.
Özel XML Özellikleri
CustomXmlPart‘dan ayrı olarak, CustomXmlProperty tek bir ad/değer XML özelliğini temsil eder, CustomXmlProperty(name, uri, value) ile oluşturulur ve Name, Uri ve Value‘i ortaya çıkarır. CustomXmlPropertyCollection bunların bir kümesini yönetir: Add(property) bir tane ekler, indeksleyici (ör. properties["MyProp"]) isme göre birini bulur ve Contains(name) var olup olmadığını test eder, IndexOfKey(name) konumunu döndürür ve Remove(name)/RemoveAt(index)/Clear() girişleri kaldırır. SmartTag.Properties bir CustomXmlPropertyCollection döndürür, bu da eski bir akıllı etiketin yapılandırılmış verisinin temsil edildiği şeklidir (aşağıya bakın).
Paket Düzeyinde Özel Parçalar
Document.PackageCustomParts bir CustomPartCollection döndürür CustomPart nesnelerinin — OOXML paketinde depolanan, özel XML verileri olmayan, dosyaya dokunan diğer uygulamalar tarafından eklenen parçalar gibi keyfi parçalar. Her CustomPart bir Name, ContentType, RelationshipType, bir Data bayt dizisine ve parçanın gömülü içerik yerine harici bir referans olup olmadığını gösteren bir IsExternal bayrağına sahiptir. Koleksiyon Add(part), RemoveAt(index), Clear() ve Clone() destekler, ayrıca Count.
Eski Akıllı Etiketler
SmartTag, tanınan metnin etrafına sarılmış eski bir Word akıllı etiketi temsil eden bir düğüm türüdür (NodeType.SmartTag). Bir SmartTag, SmartTag(doc) ile oluşturulur ve Element (tanıyıcı öğe adı) ve Uri (tanıyıcının ad alanı) ile birlikte Properties — tanıyıcının etiketli metne eklediği yapılandırılmış verileri tutan bir CustomXmlPropertyCollection — öğesini ortaya çıkarır. SmartTag bir düğüm olduğundan, diğer düğümler gibi belge ağacına da katılır ve Accept(visitor), AcceptStart(visitor) ve AcceptEnd(visitor) destekleyerek DocumentVisitor-tabanlı gezinmeyi sağlar.
MarkupLevel
MarkupLevel bir enum’dur — Unknown, Inline, Block, Row, Cell — yapılandırılmış bir belge etiketi gibi bir işaretleme öğesinin ortaya çıkabileceği belge ağacındaki yapısal seviyeyi tanımlar.
İpuçları ve En İyi Uygulamalar
- Gerekli parçanın kimliğini bildiğinizde koleksiyonu elle döngüye almaktansa
CustomXmlPartCollection.GetById(id)kullanın. - Tam bir bayt karşılaştırması yapmadan temel XML verisinin değişip değişmediğini tespit etmek için
CustomXmlPart.DataChecksum‘ı okuyun. Document.CustomXmlParts‘ı (içerik denetimlerine sık sık bağlı özelleştirilmiş XML verisi)Document.PackageCustomParts‘den (keyfi olmayan-XML paket bölümleri) ayırın — farklı amaçlara hizmet eder ve ayrı ayrı depolanırlar.- Akıllı etiketler kullanan eski belgelerle çalışırken, etiketin
Properties‘sine güvenmeden önce hangi tanıyıcının etiketi oluşturduğunu belirlemek içinSmartTag.ElementveUri‘i birlikte kontrol edin. - Belgeler arasında veri kopyalarken ham XML’i yeniden okuma ve ekleme yerine, özelleştirilmiş XML bölümlerini
CustomXmlPart.Clone()(veya koleksiyonunClone()) ile çoğaltın.
Yaygın Sorunlar
| Sorun | Neden | Düzeltme |
|---|---|---|
CustomXmlPartCollection.GetById(id) kullanılabilir bir şey döndürmüyor | id, Document.CustomXmlParts içinde şu anda bulunan hiçbir parçayla eşleşmiyor | Koleksiyonu listeleyerek id’yi doğrulayın, ya da önce Add(id, xml) ile parçayı ekleyin |
| Özel XML verileri, görünen içerik denetimlerine alakasız görünüyor | İçerik denetimleri, kendi veri bağlama yapılandırmaları aracılığıyla özel XML ile bağlanır, her CustomXmlPart için otomatik olarak bağlanmaz | Bir içerik denetiminin hangi bölüme bağlandığını, Document.CustomXmlParts ile 1:1 bir ilişki varsaymak yerine doğrulayın |
Başka bir uygulama tarafından eklenen bir paket bölümü CustomXmlParts içinde bulunamadı | XML olmayan paket bölümleri Document.PackageCustomParts aracılığıyla sunulur, CustomXmlParts aracılığıyla değil | Bunun yerine PackageCustomParts‘ı (CustomPartCollection) kontrol edin |
SmartTag.Properties boş | Her akıllı etiket tanıyıcısı yapılandırılmış özellikler eklemez | Belirli özellikleri beklemeden önce, etiketi hangi tanıyıcının oluşturduğunu doğrulamak için SmartTag.Element/Uri‘i kontrol edin |
FAQ
CustomXmlPart ile CustomXmlProperty arasındaki fark nedir?
CustomXmlPart bir bütün XML veri adasıdır (bayt-dizisi yükü ve ilişkili şemalarla), Document.CustomXmlParts aracılığıyla erişilir. CustomXmlProperty tek bir ad/değer çiftidir, genellikle doğrudan belge üzerinden değil SmartTag.Properties aracılığıyla erişilir.
Özel XML verisini bir belgeye nasıl eklerim?
Bir kimlik dizesi ve XML içeriği ile Document.CustomXmlParts.Add(id, xml)‘ı çağırın, ya da ayrı olarak bir CustomXmlPart oluşturup Add(part)‘ye iletin.
Paket özel bölümleri nedir ve bunlar özel XML bölümlerinden nasıl farklıdır?
Document.PackageCustomParts (CustomPart nesnesinden oluşan bir CustomPartCollection) özel XML olmayan isteğe bağlı OOXML paket bölümlerini tutar — her biri bir ContentType, RelationshipType ve ham Data‘e sahiptir. Document.CustomXmlParts özellikle özel XML veri adaları içindir.
SmartTag nedir?
SmartTag, akıllı etiket tanıyıcı tarafından tanımlanan ve sarılan metni temsil eden eski bir Word özelliğidir. Bu, tanıyıcıyı tanımlayan bir Element ve Uri‘a sahip bir belge düğümüdür (NodeType.SmartTag) ve tanıyıcı tarafından eklenen CustomXmlProperty değerlerinin bir Properties koleksiyonudur.
Özel XML verisini belgeler arasında nasıl kopyalarım?
Kaynak bölümde CustomXmlPart.Clone() kullanın, ardından kopyayı hedef belgenin Document.CustomXmlParts‘e Add(part) ile ekleyin.
API Reference Özeti
| Sınıf/Yöntem | Açıklama |
|---|---|
CustomXmlPart | Bir belgeye eklenmiş tek bir özel XML veri adası |
Document.CustomXmlParts | Belge üzerindeki tüm özel XML parçalarının CustomXmlPartCollection |
CustomXmlPartCollection.Add(id, xml) / GetById(id) | Kimlik (id) üzerinden özel XML parçası ekle veya getir |
CustomXmlSchemaCollection | CustomXmlPart ile ilişkili şema URI’leri |
CustomXmlProperty | Tek bir ad/değer XML özelliği |
CustomXmlPropertyCollection | Bir CustomXmlProperty değeri koleksiyonu, ör. SmartTag.Properties üzerinde |
Document.PackageCustomParts | Keyfi non-XML OOXML paket bölümlerinin CustomPartCollectionsi |
CustomPart | Bir paket düzeyinde özel bölüm, Name, ContentType ve ham Data içerir |
SmartTag | Akıllı etiket tanıyıcısı tarafından tanınan metni saran eski düğüm türü |
MarkupLevel | Bir işaretleme öğesinin belge ağacında nerede ortaya çıkabileceğini tanımlayan enum |