这让我发疯了。我需要将几个XML类合并到一个最终文档中。它们都是由联邦政府定义的。因此,在使用适当的值填充每个xml类(使用XML数据绑定向导创建)之后,我需要插入几个类作为子节点。不幸的是,我这样做的方式创建了一个空的(而不是联邦规范)xmlns =“”属性。这是我的代码的要点(删除了不相关的部分)
IRSReturn = new TXMLDocument(GetWindow());
IRSReturn->DOMVendor = GetDOMVendor("MSXML"); // NOT cross platform compatible
IRSReturnRoot = GetReturn(IRSReturn);
IRSReturn->Version = "1.0";
IRSReturn->Encoding = "UTF-8";
IRSReturnRoot->returnVersion = "2015v3.0";
IRSReturnRoot->SetAttribute("xmlns", eReturn_TargetNamespace);
IRSReturnRoot->SetAttribute("xmlns:xsd", eReturn_Schema);
IRSReturnRoot->SetAttribute("xmlns:efile", eReturn_TargetNamespace);
IRSReturnHeader = new TXMLDocument(GetWindow());
IRSReturnHeader->DOMVendor = GetDOMVendor("MSXML"); // NOT cross platform compatible
IRSRetHeadRoot = GetReturnHeader(IRSReturnHeader);
// Fill out IRSRetHeadRoot fields ...
IRSReturnRoot->ChildNodes->Add(IRSReturnHeader->DocumentElement);
IRSReturn->XML->Text = FormatXMLData(IRSReturn->XML->Text);
IRSReturn->Active = true;
IRSReturn->SaveToFile("IRSReturnTest.xml");
完全 除了 后,ReturnHeader子节点会添加一个不需要的xmlns =“”属性,如下所示:
<?xml version="1.0"? encoding="UTF-8"?>
<Return returnVersion="2015v3.0" xmlns="http://www.irs.gov/efile" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:efile="http://www.irs.gov/efile">
<ReturnHeader xmlns="" binaryAttachmentCnt="0">
// details removed
</ReturnHeader>
</Return>
如何在添加后删除不需要的命名空间属性,或者更好地保持Add()方法不首先添加它?
(我尝试使用下面的代码关闭doAutoPrefix选项,但似乎没有任何区别。)
IRSReturn->Options = IRSReturn->Options >> doAutoPrefix;