2010-11-25 3 views
4

Je suis en train d'analyser certains documents Word OpenXML en utilisant le .Net OpenXml SDK 2.0. J'ai besoin de remplacer certaines phrases par d'autres phrases dans le cadre du traitement. En parcourant les paragraphes, je sais quand j'ai trouvé quelque chose que je dois remplacer, mais je suis perplexe quant à la façon dont je peux le remplacer. Par exemple, disons que je dois remplacer la phrase "a contract exclusively for construction work that is not building work." par un extrait html à un contenu réutilisable Sharepoint ci-dessous.Comment remplacer un texte de paragraphe en utilisant OpenXML Sdk

<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: Je suis le docx à la conversion Html a travaillé à l'aide xslt, de sorte que est une sorte de ne pas un problème à ce stade

La propriété InnerText du noeud paragraphe me donne le texte proprement dit , mais la propriété de texte interne elle-même n'est pas réglable. Donc Regex.Match(currentParagraph.InnerText, currentString).Success renvoie vrai et me dit que le paragraphe actuel contient le texte que je veux. Comme je l'ai dit, InnerText lui-même n'est pas paramétrable, j'ai donc essayé de créer un nouveau paragraphe en utilisant outerxml ci-dessous.

string modifiedOuterxml = Regex.Replace(currentParagraph.OuterXml, currentString, reusableContentString); 
OpenXmlElement parent = currentParagraph.Parent; 
Paragraph modifiedParagraph = new Paragraph(modifiedOuterxml); 
parent.ReplaceChild<Paragraph>(modifiedParagraph, currentParagraph); 

Même si je ne suis pas trop préoccupé par la mise en forme à ce niveau et il ne semble pas avoir, le OuterXml semble avoir des éléments supplémentaires qui défont l'expression régulière.

..."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>

Donc, en résumé, comment pourrais-je remplacer le texte dans un paragraphe de OpenXml avec un autre texte. Même au détriment de perdre une partie de la mise en forme.

Répondre

6

J'ai corrigé moi-même. La clé était de supprimer toutes les courses et de créer de nouvelles pistes dans le paragraphe actuel

string modifiedString = Regex.Replace(currentParagraph.InnerText, currentString, reusableContentString); 
currentParagraph.RemoveAllChildren<Run>(); 
currentParagraph.AppendChild<Run>(new Run(new Text(modifiedString))); 
Questions connexes