C# 将XML字符串插入到openXML文档中

C# 将XML字符串插入到openXML文档中,c#,xml,openxml,C#,Xml,Openxml,我正在尝试用openXML docx中的图像替换文本元素占位符 我找到了一个教程,它似乎可以满足我的需要,但我不太明白他是如何插入图像的 基本上,我有一个XML“图像模板”存储在字符串中。我可以将图像存储到媒体文件夹,并将图像ID插入XML字符串: string imageNode = _xml.Replace("##imageId##", documentMainPart.GetIdOfPart(newImage)); 现在我有了正确的XML作为字符串,需要将其插入到文档

我正在尝试用openXML docx中的图像替换文本元素占位符

我找到了一个教程,它似乎可以满足我的需要,但我不太明白他是如何插入图像的

基本上,我有一个XML“图像模板”存储在字符串中。我可以将图像存储到媒体文件夹,并将图像ID插入XML字符串:

string imageNode 
         = _xml.Replace("##imageId##", documentMainPart.GetIdOfPart(newImage));
现在我有了正确的XML作为字符串,需要将其插入到文档中

我可以找到要用新的图像XML替换的占位符文本节点

var placeholder = documentMainPart.Document.Body
               .Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>()
               .Where(t => t.Text.Contains("##imagePlaceholder##")).First();
var占位符=documentMainPart.Document.Body
.后代()
.Where(t=>t.Text.Contains(“###图像占位符”);

但这就是我被卡住的地方。我看不出如何进行替换/插入,它将使用XML字符串。我已经设法将XML输出作为文档中的文本,但我希望以某种方式将其转换为XML元素。

如果您询问如何导入显示图像的XML,那么这应该不是什么大问题

但是我不确定你是如何存储图像的,但是我想你必须在.docx中的某个地方用一个合适的名称导入它,但是我假设你通过阅读你的帖子就知道了

用图像xml内容替换占位符很容易

var parent = placeholder.Parent;
parent.ReplaceChild(imageXML, placeholder);
在这里,您实际上是用文本标记替换图像内容,但我不能确定这将如何工作。我知道图像可能在跑步标记中,我假设它是文本标记的父标记

现在,如果您从命令中获得的XML是正确的,您应该可以了。我想应该是Drawing/Inline/Graphic root


如果我误解了您的问题,请发表意见

要将字符串表示形式转换为属于xml文档的xml节点,请使用XmlDocument.CreateFragment:

XmlDocumentFragment docFrag = doc.CreateDocumentFragment();
docFrag.InnerXml = imageXML;
placeholder.Parent.ReplaceChild(docFrag,placeholder);