C# 使用Office主互操作程序集并调用CustomXMLNode.AppendChildNode()时,如何引用以前定义的XML命名空间?
显然,我遗漏了一些内容,因为在Office 2016或更高版本中调用C# 使用Office主互操作程序集并调用CustomXMLNode.AppendChildNode()时,如何引用以前定义的XML命名空间?,c#,xml,vsto,office-interop,office-2016,C#,Xml,Vsto,Office Interop,Office 2016,显然,我遗漏了一些内容,因为在Office 2016或更高版本中调用CustomXMLNode.AppendChildNode()时,我无法引用以前定义的XML命名空间: private void AppendChild(Microsoft.Office.Core.CustomXMLNode node) { node.AppendChildNode("nil", "xmlns:xsi", Microsoft.Office.Core.MsoCustomXMLNodeType.msoCust
CustomXMLNode.AppendChildNode()
时,我无法引用以前定义的XML命名空间:
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>
很显然,“NamespaceURI”参数(请参阅)只是字面意思,每次都被定义为一个新的名称空间。我尝试了以下所有方法,但均无效:
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");
上述所有调用都会生成以下等价项,
替换为作为上述第二个参数传入的字符串:
<IndexId xmlns:ns3="<NamespaceURI_arg>" ns3:nil="true"></IndexId>
这会产生不必要的冗长:
<IndexId xmlns:ns0="http://www.w3.org/2001/XMLSchema-instance" ns0:nil="true"></IndexId>
请您在您的问题中编辑一些简单的示例XML,用于自定义XML部分,这样我们就可以进行测试了?请注意,VBA不会在现有XML中使用预定义的命名空间别名。它分配了自己的(ns前缀),因此通常需要使用名称空间管理器功能。请您在问题中编辑一些简单的示例XML,用于自定义XML部分,以便我们进行测试?请注意,VBA不会在现有XML中使用预定义的命名空间别名。它分配自己的(ns前缀),因此通常需要使用名称空间管理器功能。
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>