XMLDocReceive := NewXMLDocument;
  XMLDocReceive.Active := True; //激活OutXMLDoc,自动初始化空的XML文档
  XMLDocReceive.Encoding := 'UTF-8'; //设置字符集
  ARootNode := XMLDocReceive.AddChild('Message1'); //建根结点
  ARootNode.SetAttribute('xmlns', 'http://www.163.com');
  AChildNode := ARootNode.AddChild('version');
  AChildNode.NodeValue := '1.0';
  XMLDocReceive.XML.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.xml');
  XMLDocReceive.Active := False;
生成的XML如下:
  <?xml version="1.0" encoding="UTF-8" ?> 
  <Message1 xmlns="http://www.163.com">
    <version xmlns="">1.0</version> 
  </Message1>
我的问题是为什么子节点的Version后面也会出现xmlns=""的属性,请问如何去掉?

解决方案 »

  1.   

    创建根结点,应该是
    ARootNode:=XMLDocReceive.CreateNode('Message1');
    XMLDocReceive.DocumentElement:=ARootNode;
      

  2.   


    结果是一样的,子节点都会出现xmlns的属性!
      

  3.   

    FComp:TComponent;
    ....
      FComp:TComponent.create(nil)
      XMLDocReceive := TXMLDocument.create(FComp); 
    try
      XMLDocReceive.Active := True; //激活OutXMLDoc,自动初始化空的XML文档 
      XMLDocReceive.Encoding := 'UTF-8'; //设置字符集 
      ARootNode:=XMLDocReceive.CreateNode('Message1'); //建根结点
      XMLDocReceive.DocumentElement:=ARootNode;   
      ARootNode.Attributes['xmlns']:='http://www.163.com'; 
      AChildNode := ARootNode.AddChild('version'); 
      AChildNode.NodeValue := '1.0'; 
      XMLDocReceive.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.xml'); 
    finally
      XMLDocReceive.free;
      FComp.free;
    end;这么用应该没问题的,我一直都是这么用的
      

  4.   


    procedure TForm1.FormCreate(Sender: TObject);
    var
      ARootNode, AChildNode: IXMLNode;
    begin
      Doc.Active := True; //激活OutXMLDoc,自动初始化空的XML文档
      Doc.Encoding := 'UTF-8'; //设置字符集
      ARootNode:= Doc.CreateElement('Message1', 'http://www.163.com');//正常建立
      Doc.DocumentElement:= ARootNode;
    //  ARootNode := Doc.AddChild('Message1'); //建根结点
    //  ARootNode.SetAttribute('xmlns', 'http://www.163.com');
      AChildNode := ARootNode.AddChild('version');
      AChildNode.NodeValue := '1.0';
      Doc.XML.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.xml');
      Doc.Active := False;
    end;
    <?xml version="1.0" encoding="UTF-8"?>
    <Message1 xmlns="http://www.163.com"><version xmlns="">1.0</version></Message1>//==============
    建立根应该Doc.CreateElement('Message1', 'http://www.163.com'),这样就不会出现这种情况,我已经试过了。对直接AddChild为什么会出现你说的情况也感兴趣,希望有高人解答