I incorporated the code into my project. It worked with some modification.
private void FindReplace(Document doc, string rootPath)
{
DocumentBuilder builder = new DocumentBuilder(doc);
string desiredtextchanged = "This is changed Text";
//Get the cooresponding run for each keyword
Run keywordHeader1 = GetKeywordPosition(doc, "keywordHeader1");
Run keywordHeader2 = GetKeywordPosition(doc, "keywordHeader2");
Run keywordTitle1 = GetKeywordPosition(doc, "keywordTitle1");
Run keywordTitle2 = GetKeywordPosition(doc, "keywordTitle2");
Boolean blnDelete = false;
Node[] Runs = doc.GetChildNodes(NodeType.Run, true).ToArray();
// Replace in Header
if (keywordHeader1 != null && keywordHeader2 != null)
{
foreach (Run run in Runs)
{
if (run == keywordHeader2)
{
blnDelete = false;
builder.MoveTo(run);
run.Text = "REpalcement header Text";
// run.Remove();
continue;
}
else if (blnDelete == true)
{
// run.Remove();
builder.MoveTo(run);
}
else if (run == keywordHeader1)
{
// builder.MoveTo(run);
// CompositeNode dstStory = run.ParentNode;
// dstStory.InsertAfter(new Run(doc, desiredtextchanged), run);
blnDelete = true;
// run.Remove();
continue;
}
}
}
// Replace Title in first section
if (keywordTitle1 != null && keywordTitle2 != null)
{
foreach (Run run in Runs)
{
if (run == keywordTitle2)
{
blnDelete = false;
// run.Remove();
continue;
}
else if (blnDelete == true)
{
// run.Remove();
builder.MoveTo(run);
run.Text = desiredtextchanged;
}
else if (run == keywordTitle1)
{
// builder.MoveTo(run);
// CompositeNode dstStory = run.ParentNode;
// dstStory.InsertAfter(new Run(doc, desiredtextchanged), run);
blnDelete = true;
// run.Remove();
continue;
}
}
}
doc.Save(rootPath + @"output.docx");
}
Is there any way to get extract run nodes from a collection of headerfooter nodes? So basically call:
NodeCollection headerfooterNodes = doc.GetChildNodes(NodeType.HeaderFooter, true);
Is this basically the same idea as
HeaderFooter headerFooter = (HeaderFooter)doc.GetChild(NodeType.HeaderFooter, 0 , true);
NodeCollection headerFooterRuns = headerFooter.ChildNodes;
Then extract just the run nodes from headerfooterNodes? I am thinking this might be a start to getting the ‘speed up’ I want in running the code. (Basically the answer to my previous post.)
What would you suggest, please?
Thank you.