DocumentCustomXmlParts Property

Gets or sets the collection of Custom XML Data Storage Parts.

Namespace:  Aspose.Words
Assembly:  Aspose.Words (in Aspose.Words.dll) Version: 20.9.0


public CustomXmlPartCollection CustomXmlParts { get; set; }

Property Value

Type: CustomXmlPartCollection


Aspose.Words loads and saves Custom XML Parts into OOXML and DOC documents only.

This property cannot be null.


Shows how to create structured document tag with a custom XML data.
Document doc = new Document();

// Construct an XML part that contains data and add it to the document's collection
// Once the "Developer" tab in Microsoft Word is enabled,
// we can find elements from this collection as well as a couple defaults in the "XML Mapping Pane" 
string xmlPartId = Guid.NewGuid().ToString("B");
string xmlPartContent = "<root><text>Hello world!</text></root>";
CustomXmlPart xmlPart = doc.CustomXmlParts.Add(xmlPartId, xmlPartContent);

// The data we entered is stored in these attributes
Assert.AreEqual(Encoding.ASCII.GetBytes(xmlPartContent), xmlPart.Data);
Assert.AreEqual(xmlPartId, xmlPart.Id);

// XML parts can be referenced by collection index or GUID
Assert.AreEqual(xmlPart, doc.CustomXmlParts[0]);
Assert.AreEqual(xmlPart, doc.CustomXmlParts.GetById(xmlPartId));

// Once the part is created, we can add XML schema associations like this

// We can also clone parts and insert them into the collection directly
CustomXmlPart xmlPartClone = xmlPart.Clone();
xmlPartClone.Id = Guid.NewGuid().ToString("B");

Assert.AreEqual(2, doc.CustomXmlParts.Count);

// Iterate through collection with an enumerator and print the contents of each part
using (IEnumerator<CustomXmlPart> enumerator = doc.CustomXmlParts.GetEnumerator())
    int index = 0;
    while (enumerator.MoveNext())
        Console.WriteLine($"XML part index {index}, ID: {enumerator.Current.Id}");
        Console.WriteLine($"\tContent: {Encoding.UTF8.GetString(enumerator.Current.Data)}");

// XML parts can be removed by index

Assert.AreEqual(1, doc.CustomXmlParts.Count);

// The XML part collection itself can be cloned also
CustomXmlPartCollection customXmlParts = doc.CustomXmlParts.Clone();

// And all elements can be cleared like this

// Create a StructuredDocumentTag that will display the contents of our part,
// insert it into the document and save the document
StructuredDocumentTag tag = new StructuredDocumentTag(doc, SdtType.PlainText, MarkupLevel.Block);
tag.XmlMapping.SetMapping(xmlPart, "/root[1]/text[1]", string.Empty);


doc.Save(ArtifactsDir + "StructuredDocumentTag.CustomXml.docx");

See Also