我正在尝试在已打开的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
.
我发现了 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
orValue
属性或类似的东西。我看不到任何从节点获取文本或更新它们的方法。我尝试投射节点,但没有编译。
我是否朝着正确的方向前进?或者有没有更简单的方法?任何指针将不胜感激,谢谢。