Очевидно, что я что-то упускаю, потому что я не могу ссылаться на ранее определенное пространство имен XML при вызове CustomXMLNode.AppendChildNode()
в Office 2016 или более поздней версии:
private void AppendChild(Microsoft.Office.Core.CustomXMLNode node)
{
node.AppendChildNode("nil", "xmlns:xsi", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
}
Приведенный выше вызов вызывает:
<IndexId xmlns:ns3="xmlns:xsi" ns3:nil="true"></IndexId>
Что не понимается службой, на которую я отправляю сообщения.CustomXMLPart знает о пространстве имен "xsi", что очевидно из открывающего тега строки, возвращаемой CustomXMLPart.XML
:
<ns1:TestData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://schemas.rockportsys.com/rockportXML">
Так что, очевидно, аргумент "NamespaceURI" (см. https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.core.customxmlnode.appendchildnode) просто воспринимается буквально и каждый раз определяется как новое пространство имен.Я пробовал все следующее безрезультатно:
node.AppendChildNode("nil", "xsi", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
node.AppendChildNode("nil", "xsi:", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
node.AppendChildNode("nil", ":xsi", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
node.AppendChildNode("nil", "xmlns:xsi", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
Все вышеперечисленные вызовы производят эквивалент следующего с <NamespaceURI_arg>
заменяется строкой, переданной в качестве второго аргумента выше:
<IndexId xmlns:ns3="<NamespaceURI_arg>" ns3:nil="true"></IndexId>
Ничего из этого не работает с потребляющим сервисом. Как, черт возьми, мы должны ссылаться на ранее определенное пространство имен при добавлении дочернего элемента?такое волшебное заклинание?
Единственный способ, которым я смог заставить его работать, - это:
node.AppendChildNode("nil", "http://www.w3.org/2001/XMLSchema-instance", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCustomXMLNodeAttribute, "true");
, который приводит к ненужному многословию:
<IndexId xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance" ns0:nil="true"></IndexId>