Я работаю с Linq to Xml для работы с документами openXml. Точнее я пытаюсь читать и писать в документы пользовательские свойства. В настоящее время у меня проблема с добавлением префикса в XElement. Мой код выглядит так:
Dim main as XNameSpace = "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties"
Dim vt as XNameSpace = "http://schemas.openxmlformats.org/officeDocument2006/docPropsVTypes"
Dim props as XElement = cXDoc.Element(main + "Properties"
props.Add(New XElement(main + "property"), _
New XAttribute("fmtid", formatId), _
New XAttribute("pid", pid + 1), _
New XAttribute("name", "test"), _
New XElement(vt + "lpwstr", "test value")) _
)
Xml, содержащийся в подпорках перед добавлением:
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" />
Xml после вызова метода props.add ():
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
<property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="test">
<lpwstr xmlns="http://schemas.openxmlformats.org/officeDocument2006/docPropsVTypes">test value</lpwstr>
</property>
</Properties>
В элементе свойства я должен получить
<vt:lpwstr>test value</vt:lpwstr>
но просто не могу этого добиться. Я не хочу атрибут xmlns для этого элемента здесь. Я думаю, что мне как-то нужно вернуть карту vt XNameSpace обратно в объявление пространства имен в корневом элементе «Свойства». У кого-нибудь есть предложения?