_di_IXMLNode中不需要的xmlns =“”

时间:2008-12-11 10:47:53

标签: c++ xml c++builder xmldocument

我正在使用_di_IXMLDocument创建一个在Excel中显示的xml文件。但是对于某些标签,我得到了一个不需要的额外(空)xmlns属性,这使得该文件对Excel不可读... 这就是我的所作所为:

...
_di_IXMLNode worksheet = workbook->AddChild("Worksheet");
worksheet->SetAttribute("ss:Name",Now().DateString());
...

这就是出来的结果:

<Worksheet xmlns="" ss:Name="2008-12-11">

xmlns来自哪里?我该如何摆脱它?

编辑: 更多信息:如果我尝试自己将一个xmlns属性添加到Worksheet,如下所示:

...
_di_IXMLNode worksheet = workbook->AddChild("Worksheet");
worksheet->SetAttribute("xlmns","Foo");
worksheet->SetAttribute("ss:Name",Now().DateString());
...

然后“工作表”的子节点都改为获取空的xmlns属性!

<Worksheet xmlns="Foo" ss:Name="2008-12-11">
  <Table xmlns="">

2 个答案:

答案 0 :(得分:1)

xmlns代表xml名称空间,如果某个属性没有收到显式名称空间,则它没有。

http://www.w3.org/TR/REC-xml-names/

答案 1 :(得分:0)

好的,我看了this个问题。诀窍是创建子节点并告诉它们属于哪个命名空间,然后不输出它......

_di_IXMLNode worksheet = workbook->AddChild("Worksheet","workbooks-namespace",false);
worksheet->SetAttribute("ss:Name",Now().DateString());

这会产生所需的输出:

<Worksheet ss:Name="2008-12-11">