Я пытаюсь найти и заменить в документе OpenXML
word, который я открыл в MemoryStream
.
using (WordprocessingDocument _document = WordprocessingDocument.Open(_ms, true))
{
var placeHolder = _document.MainDocumentPart.Document
.Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>()
.Where(node => node.InnerText.Contains("***PlaceHolderText***"))
.FirstOrDefault();
placeHolder.InnerText.Replace("***PlaceHolderText***", "hello world!");
}
Это не работает.Я не уверен почему, но манипулирование документом таким образом не оказывает никакого влияния на MemoryStream
.
Я нашел этот блог Эрика Уайта , который что-то делаетпохоже, но я до сих пор не совсем понимаю.Он использует XDocument
, поэтому у меня есть что-то вроде следующего:
XDocument doc = _document.MainDocumentPart.GetXDocument(); // this is an extension method
var textNodes = doc.DescendantNodes().Where(n => n.NodeType == XmlNodeType.Text);
Это находит правильные узлы в моем документе, но проблема в том, что сейчас я не могу понять, как изменитьтекст.У System.Xml.Linq.XNodes
, который я получаю таким образом (вместо узлов DocumentFormat.OpenXml.Wordprocessing.Text
, которые мне действительно нужны), нет свойства InnerText
или Value
или чего-либо подобного.Я не вижу способа получить текст с узлов или обновить их.Я попытался привести узел, но он не скомпилировался.
Я даже иду в правильном направлении?Или есть более простой способ?Любые указатели будут очень признательны, спасибо.