我正在使用 .Net OpenXml SDK 2.0 解析一些 Openxml Word 文档。作为处理的一部分,我需要用其他句子替换某些句子。在迭代段落时,我知道何时找到需要替换的内容,但我不知道如何进行替换。
例如,假设我需要将句子“a contract exclusively for construction work that is not building work.”替换为以下 SharePoint 可重复使用内容的 HTML 片段: a contract exclusively for construction work that is not building work. 注:我已经通过 XSLT 实现了 docx 到 HTML 的转换,因此这个阶段不是问题。
段落节点的 InnerText 属性给我正确的文本,但是 InnerText 属性本身无法设置。因此,Regex.Match(currentParagraph.InnerText, currentString).Success 返回 true,并告诉我当前段落包含我想要的文本。
正如我所说,InnerText 本身无法设置,因此我尝试使用下面给出的 outerxml 创建一个新段落。
例如,假设我需要将句子“a contract exclusively for construction work that is not building work.”替换为以下 SharePoint 可重复使用内容的 HTML 片段: a contract exclusively for construction work that is not building work. 注:我已经通过 XSLT 实现了 docx 到 HTML 的转换,因此这个阶段不是问题。
段落节点的 InnerText 属性给我正确的文本,但是 InnerText 属性本身无法设置。因此,Regex.Match(currentParagraph.InnerText, currentString).Success 返回 true,并告诉我当前段落包含我想要的文本。
正如我所说,InnerText 本身无法设置,因此我尝试使用下面给出的 outerxml 创建一个新段落。
string modifiedOuterxml = Regex.Replace(currentParagraph.OuterXml, currentString, reusableContentString);
OpenXmlElement parent = currentParagraph.Parent;
Paragraph modifiedParagraph = new Paragraph(modifiedOuterxml);
parent.ReplaceChild<Paragraph>(modifiedParagraph, currentParagraph);
虽然我对格式并不太关心,而且似乎也没有什么问题,但outerXML似乎有一些额外的元素,这些元素会破坏正则表达式。
..."16" /><w:lang w:val="en-AU" /></w:rPr><w:t>a</w:t></w:r><w:proofErr w:type="gramEnd" /> <w:r w:rsidRPr="00C73B58"><w:rPr><w:sz w:val="16" /><w:szCs w:val="16" /><w:lang w:val="en-AU" /></w:rPr><w:t xml:space="preserve"> 专门为非建筑工作的施工工作签订合同。</w:t></w:r></w:p>
总之,我该如何用其他文本替换OpenXml段落中的文本呢?即使牺牲一些格式。
if (var text = paragraph.Descendants<Text>().FirstOrDefault(e => e.Text == "Company Name");
获取文本。任何想要简单替换文本的人都应该能够使用这种方法。 - Goal Man