TXMLDocument->;子节点->;Add()创建不需要的空xmlns属性
这让我快发疯了。我需要将几个XML类组合成一个最终文档。它们都是由联邦政府定义的。因此,在用适当的值填充每个xml类(使用xml数据绑定向导创建)之后,我需要插入几个类作为子节点。不幸的是,我这样做会创建一个空的(而不是联邦规范)xmlns=“”属性。以下是我代码的要点(删除了不相关的部分) 这非常有效,除了ReturnHeader子节点得到一个不需要的xmlns=”“属性,如下所示:TXMLDocument->;子节点->;Add()创建不需要的空xmlns属性,xml,c++builder,Xml,C++builder,这让我快发疯了。我需要将几个XML类组合成一个最终文档。它们都是由联邦政府定义的。因此,在用适当的值填充每个xml类(使用xml数据绑定向导创建)之后,我需要插入几个类作为子节点。不幸的是,我这样做会创建一个空的(而不是联邦规范)xmlns=“”属性。以下是我代码的要点(删除了不相关的部分) 这非常有效,除了ReturnHeader子节点得到一个不需要的xmlns=”“属性,如下所示: <?xml version="1.0"? encoding="UTF-8"?> <Retur
<?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>
将名称空间添加到根文档时,需要使用
DeclareNamespace()
而不是SetAttribute()
,以便它了解名称空间并将其传播到子节点。但是,首先为什么要创建和合并两个单独的文档?为什么ReturnHeader
是它自己的文档?首先,您应该创建ReturnHeader
作为Return
的子级,然后它可以继承Return
的一个名称空间(您在调用IXMLNode::AddChild()
时指定名称空间。您应该使用NewXMLDocument()
而不是newTXMLDocument())
。我认为XML数据绑定向导在这种情况下对您没有帮助。至少,您可能需要调整生成的类,以便为它们分配适当的名称空间。但我真的不认为ReturnHeader
应该是它自己的文档,它应该作为Return
的子文档创建。
<?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>
IRSReturn->Options = IRSReturn->Options >> doAutoPrefix;