ReplacingArgs Class

Provides data for a custom replace operation.

Inheritance Hierarchy

SystemObject
  Aspose.Words.ReplacingReplacingArgs

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

Syntax

public class ReplacingArgs

The ReplacingArgs type exposes the following members.

Properties

  NameDescription
Public propertyCode exampleGroupIndex
Identifies, by index, a captured group in the Match that is to be replaced with the Replacement string.
Public propertyCode exampleGroupName
Identifies, by name, a captured group in the Match that is to be replaced with the Replacement string.
Public propertyCode exampleMatch
The Match resulting from a single regular expression match during a Replace.
Public propertyCode exampleMatchNode
Gets the node that contains the beginning of the match.
Public propertyCode exampleMatchOffset
Gets the zero-based starting position of the match from the start of the node that contains the beginning of the match.
Public propertyCode exampleReplacement
Gets or sets the replacement string.

Methods

  NameDescription
Public methodEquals (Inherited from Object.)
Public methodGetHashCode (Inherited from Object.)
Public methodGetType (Inherited from Object.)
Public methodToString (Inherited from Object.)

Examples

Replaces text specified with regular expression with HTML.
public void ReplaceWithInsertHtml()
{
    // Open the document
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.Writeln("Hello <CustomerName>,");

    FindReplaceOptions options = new FindReplaceOptions();
    options.ReplacingCallback = new ReplaceWithHtmlEvaluator();

    doc.Range.Replace(new Regex(@" <CustomerName>,"), string.Empty, options);

    // Save the modified document
    doc.Save(ArtifactsDir + "Range.ReplaceWithInsertHtml.docx");
    Assert.AreEqual("James Bond, Hello\r\x000c",
}

private class ReplaceWithHtmlEvaluator : IReplacingCallback
{
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
    {
        DocumentBuilder builder = new DocumentBuilder((Document)args.MatchNode.Document);
        builder.MoveTo(args.MatchNode);

        // Replace '<CustomerName>' text with a red bold name
        builder.InsertHtml("<b><font color='red'>James Bond, </font></b>");
        args.Replacement = "";

        return ReplaceAction.Replace;
    }
}
Shows how to insert content of one document into another during a customized find and replace operation.
public void InsertDocumentAtReplace()
{
    Document mainDoc = new Document(MyDir + "Document insertion destination.docx");

    FindReplaceOptions options = new FindReplaceOptions();
    options.Direction = FindReplaceDirection.Backward;
    options.ReplacingCallback = new InsertDocumentAtReplaceHandler();

    mainDoc.Range.Replace(new Regex("\\[MY_DOCUMENT\\]"), "", options);
    mainDoc.Save(ArtifactsDir + "InsertDocument.InsertDocumentAtReplace.docx");

}

private class InsertDocumentAtReplaceHandler : IReplacingCallback
{
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
    {
        Document subDoc = new Document(MyDir + "Document.docx");

        // Insert a document after the paragraph, containing the match text
        Paragraph para = (Paragraph)args.MatchNode.ParentNode;
        InsertDocument(para, subDoc);

        // Remove the paragraph with the match text
        para.Remove();

        return ReplaceAction.Skip;
    }
}

/// <summary>
/// Inserts content of the external document after the specified node.
/// </summary>
static void InsertDocument(Node insertionDestination, Document docToInsert)
{
    // Make sure that the node is either a paragraph or table
    if (insertionDestination.NodeType.Equals(NodeType.Paragraph) || insertionDestination.NodeType.Equals(NodeType.Table))
    {
        // We will be inserting into the parent of the destination paragraph
        CompositeNode dstStory = insertionDestination.ParentNode;

        // This object will be translating styles and lists during the import
        NodeImporter importer =
            new NodeImporter(docToInsert, insertionDestination.Document, ImportFormatMode.KeepSourceFormatting);

        // Loop through all block level nodes in the body of the section
        foreach (Section srcSection in docToInsert.Sections.OfType<Section>())
            foreach (Node srcNode in srcSection.Body)
            {
                // Skip the node if it is a last empty paragraph in a section
                if (srcNode.NodeType.Equals(NodeType.Paragraph))
                {
                    Paragraph para = (Paragraph)srcNode;
                    if (para.IsEndOfSection && !para.HasChildNodes)
                        continue;
                }

                // This creates a clone of the node, suitable for insertion into the destination document
                Node newNode = importer.ImportNode(srcNode, true);

                // Insert new node after the reference node
                dstStory.InsertAfter(newNode, insertionDestination);
                insertionDestination = newNode;
            }
    }
    else
    {
        throw new ArgumentException("The destination node should be either a paragraph or table.");
    }
}

See Also