Вставьте строку XML в документ openXML - PullRequest
3 голосов
/ 12 ноября 2010

Я пытаюсь заменить заполнитель текстового элемента изображением в формате openXML.

Я нашел здесь учебник , который, кажется, делает то, что мне нужно, но я не совсем понимаю, что он делает, чтобы вставить изображение.

По сути, у меня есть XML-шаблон изображения, хранящийся в строке. Я могу сохранить свое изображение в медиа-папке и вставить идентификатор изображения в строку XML:

string imageNode 
         = _xml.Replace("##imageId##", documentMainPart.GetIdOfPart(newImage));

так что теперь у меня есть правильный XML как строка, которую мне нужно вставить в документ.

Я могу найти свой текстовый узел-заполнитель, который я хочу заменить новым изображением XML

var placeholder = documentMainPart.Document.Body
               .Descendants<DocumentFormat.OpenXml.Wordprocessing.Text>()
               .Where(t => t.Text.Contains("##imagePlaceholder##")).First();

Но это то, где я застреваю. Я не вижу, как сделать замену / вставку, которая будет принимать строку XML. Мне удалось получить вывод XML в виде текста в документе, но я должен каким-то образом преобразовать его в элемент XML.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Чтобы преобразовать строковое представление в узел XML, принадлежащий документу XML, используйте XmlDocument.CreateFragment:

XmlDocumentFragment docFrag = doc.CreateDocumentFragment();
docFrag.InnerXml = imageXML;
placeholder.Parent.ReplaceChild(docFrag,placeholder);
1 голос
/ 05 января 2011

Если вы спрашиваете, как импортировать XML, отображающий изображение, тогда это не должно быть большой проблемой.

Как вы храните изображение, я не уверен, но я думаю, вам придется импортировать его с правильным именем где-то внутри .docx, но я предполагаю, что вы знаете это, читая ваше сообщение.

Заменить заполнитель на изображение xml thingy просто

var parent = placeholder.Parent;
parent.ReplaceChild(imageXML, placeholder);

Здесь вы фактически заменяете изображение штукой на текстовый тег, но я не уверен, как это будет работать. Я знаю, что изображение может находиться в теге run, который, как я полагаю, является родительским для вашего текстового тега.

Теперь, если ваш XML, который вы получили из вашей команды, верен, вы должны быть в порядке. Это должен быть Рисунок / Встроенный / Графический корень, я думаю.

Прокомментируйте, если я неправильно понял ваш вопрос

...