【发布时间】:2010-06-21 15:43:42
【问题描述】:
我正在尝试在 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有任何影响。
我发现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 属性或类似的东西。我看不到任何从节点获取文本或更新它们的方法。我尝试转换节点,但没有编译。
我是否朝着正确的方向前进?或者有没有更简单的方法?任何指针将不胜感激,谢谢。
【问题讨论】:
标签: xml openxml linq-to-xml memorystream file-manipulation