我正在尝试查找并替换OpenXML
word文档,我已将其打开到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
属性或类似的东西。我看不到任何方式从节点获取文本,或更新它们。我试着施放节点但没有编译。
我是否会朝着正确的方向前进?还是有更简单的方法?任何指针将非常感激,谢谢。
“你将不得不使用保存将它写回” - 其中保存方法你在说什么? – 2010-12-28 08:17:49
像这样的http://msdn.microsoft.com/en-us/library/cc838778.aspx – dkackman 2011-01-02 02:18:03