⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untxml.pas

📁 实现了:自动锁屏
💻 PAS
字号:
unit untXml;

interface

uses
  Messages, SysUtils, Variants, Classes, Controls, ComCtrls,
  OleCtrls, SHDocVw, ExtCtrls, xmldom, XMLIntf,  msxmldom, XMLDoc, untGlobal;

  function LoginParze(strXml: string): TUser;
  function getXmlNodeValue(xmlStream:TStream; xmlNodePath:String;
                           const xmlattrname:String=''; const dep:Char ='.'):String;
  procedure GetNotify(strXml: string; ANotify: TList);

implementation

procedure GetNotify(strXml: string; ANotify: TList);
  function GetNodeValue(childnodes:IXMLNodeList;nodename:String):string;
  var
     i: Integer;
  begin
     for i :=1  to childnodes.Count do begin
        if UpperCase(childnodes.Get(i-1).NodeName) = UpperCase(nodename) then begin
           result:= childnodes[i-1].Text;
           exit;
        end;
     end;
  end;
var
  Notify: PNotify;
  xmlDocument :IXMLDocument;
  i: integer;
  NodeList:IXMLNodeList;
  xmlStream: TStream;
begin
  xmlStream := TStringStream.Create(strXml);
  xmlDocument :=TXMLDocument.Create(nil);
  xmlDocument.LoadFromStream(xmlStream);
  xmlDocument.Active:=true;
  try
    NodeList := xmlDocument.DocumentElement.ChildNodes[1].ChildNodes;   //root.content.notify
    for i := 0 to NodeList.Count - 1 do
    begin
      New(Notify);
      Notify.ID := StrToInt(GetNodeValue(NodeList[i].ChildNodes, 'ID'));
      Notify.UserID := StrToInt(GetNodeValue(NodeList[i].ChildNodes, 'UserID'));
      Notify.Title := GetNodeValue(NodeList[i].ChildNodes, 'Title');
      Notify.Content := GetNodeValue(NodeList[i].ChildNodes, 'Content');
      Notify.Player := GetNodeValue(NodeList[i].ChildNodes, 'Player');
      Notify.Action := GetNodeValue(NodeList[i].ChildNodes, 'Action');
      Notify.Notify_Time := strtodatetime(GetNodeValue(NodeList[i].ChildNodes, 'NotifyTime'));
      Notify.Notify_Type := StrToInt(GetNodeValue(NodeList[i].ChildNodes, 'NotifyType'));
      Notify.Flag := StrToInt(GetNodeValue(NodeList[i].ChildNodes, 'Flag'));

      ANotify.Add(Notify);
    end;
  except

  end;
end;

function LoginParze(strXml: string): TUser;
var
  xmlStream: TStream;
  Status: string;
begin
  try
    xmlStream := TStringStream.Create(strXml);
    Status := getXmlNodeValue(xmlStream, 'root.status');
    if Status <> '0' then
    begin
      Result.Uid := 0;
      Result.UserName := Status;
      exit;
    end;
    Result.Uid := StrToInt(getXmlNodeValue(xmlStream, 'root.content.user.uid'));
    Result.UserName := getXmlNodeValue(xmlStream, 'root.content.user.username');
    Result.Password := getXmlNodeValue(xmlStream, 'root.content.user.password');
    Result.Sex  := StrToInt(getXmlNodeValue(xmlStream, 'root.content.user.sex'));
    Result.Age := StrToInt(getXmlNodeValue(xmlStream, 'root.content.user.age'));
    Result.Province := getXmlNodeValue(xmlStream, 'root.content.user.province');
    Result.City := getXmlNodeValue(xmlStream, 'root.content.user.city');
    Result.Level := getXmlNodeValue(xmlStream, 'root.content.user.level');
    Result.Score := StrToInt(getXmlNodeValue(xmlStream, 'root.content.user.score'));
    Result.LastLogin := getXmlNodeValue(xmlStream, 'root.content.user.lastlogin');
    Result.LoginTimes := StrToInt(getXmlNodeValue(xmlStream, 'root.content.user.logintimes'));
    Result.TipsType := getXmlNodeValue(xmlStream, 'root.content.user.tipstype');
  except
      Result.Uid := 0;
      Result.UserName := '用户号码或密码错误';
  end;
end;

{---------------------------------------------------------------------------------------------------
  函数功能:直接读取xml文件中的某个节点第一次出现的值
  入口参数:xmlFile xml文件
            xmlnodepath 节点
            xmlattrname 节点中的属性名称,如果直接取节点值则可以忽略此参数。
            dep  节点的参数的分隔符,默认为.
  返 回 值:末级点的值
}
function getXmlNodeValue(xmlStream:TStream; xmlNodePath:String;
                         const xmlattrname:String=''; const dep:Char ='.'):String;
  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;

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.LoadFromStream(xmlStream);
    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[i])
                else Break;
            end;
            if(node=nil)then begin
                result:='';
            end else begin
                //判断是取属性还是取节点内容
                if(Trim(xmlattrname)='') then
                    result:=node.Text
                else
                    result:=node.AttributeNodes.Nodes[xmlattrname].NodeValue;
            end;
        end else begin
          result:='';
        end;

    except
        result:='error';
    end;
    xmlDocument.Active:=false;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -