在open xml元素中替换内部Text?

时间:2011-07-29 07:23:13

标签: controls openxml openxml-sdk innertext

我正在使用开放的xml SDK 2.0,我对此很不满意。

我实际上在我的单词2007文档“hello.docx”中创建了一个quickpart(包含内容控件)。现在我需要将quickpart复制到名为“hello.docx”的同一文档的另一个位置。我非常感谢这篇文章http://www.techques.com/question/1-3448297/Replacing-Content-Controls-in-OpenXML,同样的事情发布在堆栈溢出论坛上我感谢非常感谢:) ...这篇文章只是删除了内容控件,但保留了内容控件中的内容。 / p>

在上述链接的帮助下,我能够修改代码以克隆内容控件并附加到同一文档(我的代码的这部分工作正常)。但我在innerText中遇到问题。虽然我替换了打开的Xml元素中的innerText,但它并没有反映在doucument中。

public static void AddingSdtBlock(string filename, string sdtBlockTag)
{
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filename,true))
    {
        MainDocumentPart mainDocumentPart = doc.MainDocumentPart;
        List<SdtBlock> sdtList = mainDocumentPart.Document.Descendants<SdtBlock>().ToList();
        SdtBlock sdtA = null;

        foreach (SdtBlock sdt in sdtList)
        {
            if (sdt.SdtProperties.GetFirstChild<Tag>().Val.Value == sdtBlockTag)
            {
                sdtA = sdt;
                break;
            }
        }
        SdtBlock cloneSdkt = (SdtBlock)sdtA.Clone();



        OpenXmlElement sdtc = cloneSdkt.GetFirstChild<SdtContentBlock>();
      //  OpenXmlElement parent = cloneSdkt.Parent;

        OpenXmlElementList elements = cloneSdkt.ChildElements;

       // var mySdtc = new SdtContentBlock(cloneSdkt.OuterXml);

        foreach (OpenXmlElement elem in elements)
        {
          string innerxml=  elem.InnerText ;
          if (innerxml.Length>0)
          {
              string modified = "Class Name : My Class.Description : mydesc.AttributesNameDescriptionMy Attri name.my attri desc.Operations NameDescriptionmy ope name.my ope descriptn.";
             string replace= elem.InnerText.Replace(innerxml, modified);
            // mainDocumentPart.Document.Save();
          }
           // string text = parent.FirstChild.InnerText;
           // parent.Append((OpenXmlElement)elem.Clone());
        }

        mainDocumentPart.Document.Body.AppendChild<SdtBlock>(cloneSdkt);

        //sdtA.Remove();
    }
}

openXML元素中的替换字符串未反映在文档中。任何帮助都会非常感激。

提前致谢,

5 个答案:

答案 0 :(得分:1)

你的“string replace =”行什么也没做。通过创建变量,您似乎意识到string.Replace()不是就地替换,但是您没有对变量执行任何操作。

答案 1 :(得分:0)

您需要将mainDocumentPart.Document.Save();作为打开文件的using语句末尾的最后一行。这将保存您在打开文档时对文档所做的任何更改。

答案 2 :(得分:0)

我有同样的问题。 我的解决方案是首先进行替换,然后进行克隆。

答案 3 :(得分:0)

您必须使用for循环而不是foreach循环并使用它的索引器访问每个元素。

答案 4 :(得分:0)

您可以替换InnerXML

,而不是替换InnerText
elem.InnerXml = elem.InnerXml.Replace(innerxml, modified);

然后致电

mainDocumentPart.Document.Save();