Я пытаюсь найти и заменить в текстовом документе OpenXML
, который я открыл в MemoryStream
.Обработка XML в памяти
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
.
Я нашел this blog by Eric White, который делает что-то подобное, но я все еще не могу это получить. Он использует 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
или что-то в этом роде. Я не вижу способа получить текст из узлов или обновить их. Я попробовал лить узел, но это не скомпилировалось.
Я даже иду в правильном направлении? Или есть более простой способ? Любые указатели были бы очень благодарны, спасибо.
«Вам нужно будет написать его обратно с помощью« Сохранить »- о том, какой метод Save вы говорите? –
такой, как этот http://msdn.microsoft.com/en-us/library/cc838778.aspx – dkackman