2010-11-25 16 views
4

.Net OpenXml SDK 2.0を使用していくつかのOpenxmlワードドキュメントを解析しています。私は、処理の一部として特定の文を他の文と置き換える必要があります。段落を繰り返しながら、交換する必要のあるものが見つかったときはわかっていますが、どのように置き換えることができないのか分かりません。OpenXML Sdkを使用して段落のテキストを置き換える方法

たとえば、文"a contract exclusively for construction work that is not building work."をhtmlスニペットに置き換えて、以下のSharepoint Reusableコンテンツに置き換える必要があるとします。

<span class="ms-rtestate-read ms-reusableTextView" contentEditable="false" id="__publishingReusableFragment" fragmentid="/Sites/Sandbox/ReusableContent/132_.000" >a contract exclusively for construction work that is not building work.</span>

PS:私は、それは一種のこの段階では問題ではありませんので、HTML変換するdocxファイルは、XSLTを使用して働いて得た

段落ノードの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"> contract exclusively for construction work that is not building work.</w:t></w:r></w:p>

ので要約すると、どのように私は他のテキストでのOpenXmlの段落内のテキストを置き換えます。書式設定の一部を失うことを犠牲にしても。

答えて

6

自分で修正しました。キーは、すべてのランを削除し、現在の段落で新しいランを作成することでした。

string modifiedString = Regex.Replace(currentParagraph.InnerText, currentString, reusableContentString); 
currentParagraph.RemoveAllChildren<Run>(); 
currentParagraph.AppendChild<Run>(new Run(new Text(modifiedString))); 
関連する問題