MemoryStream
으로 열어 본 단어 문서 OpenXML
에서 찾기 및 바꾸려고합니다.메모리 내 XML 조작
using (WordprocessingDocument _document = WordprocessingDocument.Open(_ms, true))
{
var placeHolder = _document.MainDocumentPart.Document
.Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>()
.Where(node => node.InnerText.Contains("***PlaceHolderText***"))
.FirstOrDefault();
placeHolder.InnerText.Replace("***PlaceHolderText***", "hello world!");
}
이것은 작동하지 않습니다. 왜 그런지 모르겠지만이 방법으로 문서를 조작하면 MemoryStream
에 어떤 영향을 미치기 위해 이 보이지 않습니다.
나는 비슷한 것을하는 this blog by Eric White을 찾았지만 여전히 얻을 수 없다. 그는 XDocument
을 사용하기 때문에 나는 다음과 같은 일을 가지고 :
XDocument doc = _document.MainDocumentPart.GetXDocument(); // this is an extension method
var textNodes = doc.DescendantNodes().Where(n => n.NodeType == XmlNodeType.Text);
이 내 문서에 올바른 노드를 발견하지만, 문제는 지금은 텍스트를 변경하는 방법을 작동하지 않을 수 있습니다. System.Xml.Linq.XNodes
내가 이런 식으로 끝나면 (DocumentFormat.OpenXml.Wordprocessing.Text
노드 대신에 내가 정말로 원한다) InnerText
또는 Value
속성이나 그와 비슷한 것이 없다. 노드에서 텍스트를 가져 오거나 업데이트 할 수있는 방법이 없습니다. 노드 캐스팅 시도했지만 컴파일되지 않았습니다.
나는 올바른 방향으로 가고 있습니까? 아니면 더 쉬운 방법이 있습니까? 모든 포인터는 매우 감사하게 될 것입니다, 감사합니다.
"Save를 사용하여 다시 작성해야합니다."Save 메서드에 대해 이야기하고 있습니까? –
http://msdn.microsoft.com/en-us/library/cc838778.aspx – dkackman