攀枝花人才网

delphi xe怎么关闭xml

发布时间:2019-09-17

读XML节点(已经优化过的版本,可以直接COPY使用)
  {-------------------------------------------------------------------------------
  Fun/Pro: GetXMLNodeSpecialValue
  @Date: 2004.12.11
  @Param: xmlFile xml文件
  @Param: xmlnodepath 节点
  @Param: xmlattrname 节点中的属性名称,如果直接取节点值则可以忽略此参数。
  @Param: XMLSpecialName 要查找的节点中属性名
  @Param: XMLSpecialValue 要查找的节点中某属性对应的值
  @Param: dep 节点的参数的分隔符,默认为.
  @Return: 某属性的值
  -------------------------------------------------------------------------------}
  function GetXMLNodeSpecialValue(strEntityEngineFile:String; XMLNodePath:String;
  const XMLAttrName:String=''; const XMLSpecialName:String=''; const XMLSpecialValue:String=''; const dep:Char ='.'):String;
  var
  xmlDocument :IXMLDocument;
  node :IXMLNode;
  xmlnodeList :TStrings;
  i :Integer;
  urlcount :Integer;
  begin
  //xml节点路径
  xmlnodeList:=TStringList.Create;
  xmlnodeList.Delimiter:=dep;
  xmlnodeList.DelimitedText:=xmlnodepath;
  urlcount:=xmlnodeList.Count;
  //xml对象
  xmlDocument :=TXMLDocument.Create(nil);
  xmlDocument.LoadFromFile(strEntityEngineFile);
  xmlDocument.Active:=true;
  try
  node:= xmlDocument.DocumentElement;
  if(node.NodeName = xmlnodeList[0]) then begin
  //扫描节点
  for i := 1 to urlcount-1 do begin
  if(node<>nil) then
  begin
  node := getnodefromIXMLNodeList(node.ChildNodes,xmlnodeList);
  end
  else Break;
  end;
  if(node=nil)then begin
  result:='';
  end else begin
  //判断是取属性还是取节点内容
  if(Trim(xmlattrname)='') then
  result:=node.Text
  else
  begin
  result := node.AttributeNodes.Nodes[XMLSpecialName].NodeValue; //这里不想再声明一个临时变量了,就用result来比较,可能有隐患。
  while ((result <> XMLSpecialValue)) do
  begin
  node := node.NextSibling;
  while (node.NodeName = '#comment') do
  begin
  node:= node.NextSibling;
  end;
  result := node.AttributeNodes.Nodes[XMLSpecialName].NodeValue;
  end;
  result:=node.AttributeNodes.Nodes[XMLAttrName].NodeValue;
  end;
  end;
  end else begin
  result:='';
  end;

  except
  result:='error';
  end;
  xmlDocument.Active:=false;
  end;
  写函数 (已经优化过的版本,可以直接COPY使用)

  {-------------------------------------------------------------------------------
  Fun/Pro: SetXMLNodeSpecialValue
  @Date: 2004.12.11
  @Param: xmlFile xml文件
  @Param: xmlnodepath 节点
  @Param: xmlattrname 节点中的属性名称,如果直接取节点值则可以忽略此参数。
  @Param: XMLSpecialName 要查找的节点中属性名
  @Param: XMLSpecialValue 要查找的节点中某属性对应的值
  @Param: dep 节点的参数的分隔符,默认为.
  @Return: 操作成功与否
  -------------------------------------------------------------------------------}
  function SetXMLNodeSpecialValue(strEntityEngineFile:String; xmlNodePath:String;
  const xmlattrname:String=''; const value:String=''; const XMLSpecialName:String=''; const XMLSpecialValue:String=''; const dep:Char ='.'):boolean;
  var
  xmlDocument :IXMLDocument;
  node :IXMLNode;
  xmlnodeList :TStrings;
  i :Integer;
  urlcount :Integer;
  CMPValue :String;
  begin
  //xml节点路径
  xmlnodeList:=TStringList.Create;
  xmlnodeList.Delimiter:=dep;
  xmlnodeList.DelimitedText:=xmlnodepath;
  urlcount:=xmlnodeList.Count;
  //xml对象
  xmlDocument :=TXMLDocument.Create(nil);
  xmlDocument.LoadFromFile(strEntityEngineFile);
  xmlDocument.Active:=true;
  try
  node:= xmlDocument.DocumentElement;
  if(node.NodeName = xmlnodeList[0]) then begin
  //扫描节点
  for i := 1 to urlcount-1 do begin
  if(node<>nil) then
  node := getnodefromIXMLNodeList(node.ChildNodes,xmlnodeList)
  else Break;
  end;

  if(node <> nil)then begin
  {if(Trim(xmlattrname)='') then
  node.Text:=value
  else
  node.AttributeNodes.Nodes[xmlattrname].NodeValue:=value;
  }
  if (Trim(XMLAttrName)='') then
  node.Text := value
  else
  begin
  CMPValue := node.AttributeNodes.Nodes[XMLSpecialName].NodeValue;
  while (CMPValue <> XMLSpecialValue) do
  begin
  node := node.NextSibling;
  while (node.NodeName = '#comment') do
  begin
  node:= node.NextSibling;
  end;
  CMPValue := node.AttributeNodes.Nodes[XMLSpecialName].NodeValue;
  end;
  node.AttributeNodes.Nodes[XMLAttrName].NodeValue:=value;
  end;
  xmlDocument.SaveToFile(strEntityEngineFile);
  end;
  end;
  result:=true;
  except
  result:=false;
  end;
  xmlDocument.Active:=false;
  end;

  网上很多用户反映getnodefromIXMLNodeList这个函数没有声明,现将该函数贴出来。做为上面帖子的补充

  function getnodefromIXMLNodeList(childnodes:IXMLNodeList;nodename:String):IXMLNode;
  var
  i: Integer;
  begin
  for i :=1 to childnodes.Count do begin
  if(childnodes.Get(i-1).NodeName = nodename) then begin
  result:= childnodes[i-1];
  exit;
  end;
  end;
  end;

回复:

XML文档内容如下: ------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------- ...

回复:

读XML节点(已经优化过的版本,可以直接COPY使用) {------------------------------------------------------------------------------- Fun/Pro: GetXMLNodeSpecialValue @Date: 2004.12.11 @Param: xmlFile xml文件 @Param: xmlnodepath 节点...

回复:

uses xmldoc,XMLIntf; var m_Xml:TXMLDocument; PsPersonnelInfo:IXMLNode; PsName,PsSex,PsAge: String; begin m_Xml := TXMLDocument.Create(self); m_Xml.Active := false; // m_Xml.LoadFromFile(ExtractFilePath(Application.ExeName)+'xxf...

回复:

xml:=txmldocument.creat(self); try Root:=xml.documentElement; item := Root.ChildNodes.First; //message节点 while item nil do begin //*********************循环赋值******************************// time :=item.ChildNodes.FindNode(...

回复:

首先获取的话 可以用idhttp var xml:string; XML := idhttp.get("xml的地址"); 这样就是远程获取xml 解析可以用nativexml,操作比ixmldocument方便太多了,而且效率也提高了40% var ADOC: TNativexml; adoc := tnativexml.create; adoc.loadfro...

回复:

1、学习语法。语法很关键,有本书叫做《Pascal 精要》,里面的内容讲的很好。 2、组件的使用。delphi有很多组件,可以加快编程的速度和减轻难度,有本《delphi组件参考大全》,里面的内容涵盖了组件板上的几乎所有组件,可以当做参考书使用。 3...

回复:

string b 要加句话吧b:=xml.DocumentElement.ChildNodes[ 'name'].Text;

回复:

您好!很高兴回答你的问题; 如上图,就可以解决了;望采纳,谢谢

回复:

XML文件必须要有也最多有1个根节点 var XMLDocument1:IXMLDocument; pNode,cNode:IXMLNode; {假设pNode为根节点,另外一个为子节点} begin if FileExists('test.xml') then DeleteFile('test.xml');{检测文件是否存在} XMLDocument1:=NewXMLDocu...

回复:

首先xml:=TXMLDocument.Create('d:\123456.xml');这句create里不能路径,你直接创建的话,直接写nil就好了;其次,node:=xml.CreateNode('123');这个Node不能数字开头的应该;应该就这两个问题吧!这样就可以了

上一篇:世界上有没有免费刷钻的? 下一篇:坐标是做什么向的的

返回主页:攀枝花人才网

本文网址:http://0812job.cn/view-83844-1.html
信息删除