【问题标题】:Insert an XML string into an openXML document将 XML 字符串插入到 openXML 文档中
【发布时间】:2010-11-12 12:50:58
【问题描述】:

我正在尝试用 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 元素。

【问题讨论】:

    标签: c# xml openxml


    【解决方案1】:

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

    虽然我不确定你是如何存储图像的,但我想你必须在 .docx 中的某个地方使用正确的名称导入它,但我假设你通过阅读你的帖子知道这一点。

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

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

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

    现在,如果您从命令中获得的 XML 是正确的,那么您应该没问题。我认为它应该是绘图/内联/图形根。

    如果我误解了您的问题,请发表评论

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 2011-02-03
        • 2015-04-30
        相关资源
        最近更新 更多