Working with IXpsOMDocumentSequence Interfaces

This topic describes how to use the interfaces that provide access to the FixedDocumentSequence, which is the top level of the document hierarchy in an XPS OM.

Interface name Logical child interfaces Description
IXpsOMDocumentSequence
IXpsOMDocument
Groups a set of FixedDocuments into an ordered list.
IXpsOMDocumentCollection
None
The collection of FixedDocuments in an XPS document sequence.

Code Example

The following code example obtains a pointer to the IXpsOMDocumentSequence interface that contains the document sequence of the XPS OM that is represented by xpsPackage. The example then enumerates the documents in the collection.

    HRESULT                         hr = S_OK;

    IXpsOMDocumentSequence          *docSeq;
    IXpsOMDocumentCollection        *docs;
    IXpsOMDocument                  *doc;

    UINT32  numDocs = 0;
    UINT32  thisDoc = 0;

    // get the fixed document sequence of the package
    hr = xpsPackage->GetDocumentSequence(&docSeq);

    // get the collection of fixed documents in 
    //  the fixed document sequence
    hr = docSeq->GetDocuments(&docs);

    // walk the collection of documents;
    hr = docs->GetCount(&numDocs);
    thisDoc = 0;
    while (thisDoc < numDocs) {
        hr = docs->GetAt(thisDoc, &doc);
 
        // use this doc for something

        // release this doc and then go to the next one
        doc->Release();
        thisDoc++;
    }
    // release the document collection and
    // the document sequence
    docs->Release();
    docSeq->Release();