首页 文章

将XML字符串插入openXML文档

提问于
浏览
3

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

我找到了一个教程here似乎做了我需要的东西,但我并没有完全遵循他插入图像的方式 .

基本上,我有一个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();

但这是我被困的地方 . 我看不到如何进行替换/插入将采用XML字符串 . 我已经设法将XML输出作为文本中的文本,但我想以某种方式将其转换为XML元素 .

2 回答

  • 1

    如果您询问如何导入显示图像的XML,那么它应该不是一个大问题 .

    你如何存储图像我不确定,但我想你必须在.docx内的某个地方导入它,但我假设你通过阅读你的帖子知道这一点 .

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

    var parent = placeholder.Parent;
    parent.ReplaceChild(imageXML, placeholder);
    

    在这里,您实际上是用文本标签替换图像,但我不能确定它是如何工作的 . 我知道图像可以在运行标记内,我认为它是文本标记的父级 .

    现在,如果你的XML形式你的命令是正确的,你应该没问题 . 它应该是Drawing / Inline / Graphic root我想 .

    请评论如果我误解了你的问题

  • 1

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

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

相关问题