大
大毛
Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个比较长的函数,用于检索XML文件。
将节点的text取回,用了For循环和嵌套if语句进行了判断,
然后将检索结果写入一个临时的空XMl文件中,并在WebBrowser中显示出来。
最后将此临时XML文件中新添的节点清除。
使用了IXMLDOMDocument的若干方法用于取节点集IXMLNodesName,IXMLNodesAlias等和清空节点;
使用TXMLDocument控件的若干方法用于写XML文件。
由于本人初学编程,代码写的很不规范(包括命名,对象创建及释放)。
肯定各位提出各种可能的意见!!!
procedure TMain.Search_m(XmlDom: IXMLDOMDocument);
var
is_name,is_type: Boolean;
use_name,use_type: Boolean;
i: integer;
temp_path,NodeName: string;
IXMLNodesName,IXMLNodesAlias,IXMLNodesType,IXMLNodesEng: IXMLDOMNodeList;
xnode,xnode1,
xnode4,xnode5,
xnode6: IXMLNode;
do
mEle: IXMLDOMElement;
begin
is_name := false;
is_type := false;
use_name := Form_Medicine.RadioButton1.Checked or Form_Medicine.RadioButton2.Checked or Form_Medicine.RadioButton3.Checked;
use_type := Form_Medicine.CheckBox1.Checked;
NodeName := XmlDom.lastChild.nodeName;
//取回目录名
IXMLNodesName := XmlDom.selectNodes( NodeName+'/类别/子类别/药品/药品名');
IXMLNodesAlias := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/别名');
IXMLNodesType := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/剂型');
IXMLNodesEng := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/英文名');
temp_path := ExtractFilePath(ldb_file);
XMLSearch.LoadFromFile(temp_path + 'Medicine.xml');
//这里进行循环,length至多1000
for i := 0 to IXMLNodesName.length - 1do
begin
if Form_Medicine.RadioButton1.Checked then
begin
NodeName := IXMLNodesName.text;
if StrPos(PChar(NodeName),PChar(Form_Medicine.Edit_name.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton2.Checked then
begin
NodeName := IXMLNodesAlias.text;
if StrPos(PChar(IXMLNodesAlias.text),PChar(Form_Medicine.Edit_alias.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton3.Checked then
begin
NodeName := IXMLNodesEng.text;
if StrPos(PChar(IXMLNodesEng.text),PChar(Form_Medicine.Edit_eng.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton4.Checked then
begin
use_name := false;
end;
if Form_Medicine.CheckBox1.Checked then
begin
NodeName := IXMLNodesType.text;
if StrPos(PChar(NodeName),PChar(Form_Medicine.Edit_type.Text)) <> nil then
begin
is_type := true;
end;
end;
//这里开始判断,并写XML文件(添加各节点)
if is_name and use_name and is_type and use_type then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
if (not use_name) and is_type and use_type then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
if (not use_type) and is_name and use_name then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
is_name := false;
is_type := false;
XMLSearch.SaveToFile();
WebBrowser1.Navigate(temp_path + 'Medicine.xml');
Application.ProcessMessages;
end;
//这里是使检索完毕后,将临时文件添加的节点清除
IXML3 := XmlDomDoc^.Create();
IXML3.load(temp_path + 'Medicine.xml');
IXML3.removeChild(IXML3.documentElement);
do
mEle := IXML3.createElement('药品目录');
IXML3._Set_documentElement(DomEle);
IXML3.save(temp_path + 'Medicine.xml');
end;
将节点的text取回,用了For循环和嵌套if语句进行了判断,
然后将检索结果写入一个临时的空XMl文件中,并在WebBrowser中显示出来。
最后将此临时XML文件中新添的节点清除。
使用了IXMLDOMDocument的若干方法用于取节点集IXMLNodesName,IXMLNodesAlias等和清空节点;
使用TXMLDocument控件的若干方法用于写XML文件。
由于本人初学编程,代码写的很不规范(包括命名,对象创建及释放)。
肯定各位提出各种可能的意见!!!
procedure TMain.Search_m(XmlDom: IXMLDOMDocument);
var
is_name,is_type: Boolean;
use_name,use_type: Boolean;
i: integer;
temp_path,NodeName: string;
IXMLNodesName,IXMLNodesAlias,IXMLNodesType,IXMLNodesEng: IXMLDOMNodeList;
xnode,xnode1,
xnode4,xnode5,
xnode6: IXMLNode;
do
mEle: IXMLDOMElement;
begin
is_name := false;
is_type := false;
use_name := Form_Medicine.RadioButton1.Checked or Form_Medicine.RadioButton2.Checked or Form_Medicine.RadioButton3.Checked;
use_type := Form_Medicine.CheckBox1.Checked;
NodeName := XmlDom.lastChild.nodeName;
//取回目录名
IXMLNodesName := XmlDom.selectNodes( NodeName+'/类别/子类别/药品/药品名');
IXMLNodesAlias := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/别名');
IXMLNodesType := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/剂型');
IXMLNodesEng := XmlDom.selectNodes(NodeName+'/类别/子类别/药品/英文名');
temp_path := ExtractFilePath(ldb_file);
XMLSearch.LoadFromFile(temp_path + 'Medicine.xml');
//这里进行循环,length至多1000
for i := 0 to IXMLNodesName.length - 1do
begin
if Form_Medicine.RadioButton1.Checked then
begin
NodeName := IXMLNodesName.text;
if StrPos(PChar(NodeName),PChar(Form_Medicine.Edit_name.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton2.Checked then
begin
NodeName := IXMLNodesAlias.text;
if StrPos(PChar(IXMLNodesAlias.text),PChar(Form_Medicine.Edit_alias.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton3.Checked then
begin
NodeName := IXMLNodesEng.text;
if StrPos(PChar(IXMLNodesEng.text),PChar(Form_Medicine.Edit_eng.Text)) <> nil then
begin
is_name := true;
end;
end;
if Form_Medicine.RadioButton4.Checked then
begin
use_name := false;
end;
if Form_Medicine.CheckBox1.Checked then
begin
NodeName := IXMLNodesType.text;
if StrPos(PChar(NodeName),PChar(Form_Medicine.Edit_type.Text)) <> nil then
begin
is_type := true;
end;
end;
//这里开始判断,并写XML文件(添加各节点)
if is_name and use_name and is_type and use_type then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
if (not use_name) and is_type and use_type then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
if (not use_type) and is_name and use_name then
begin
xnode := XMLSearch.DocumentElement.AddChild('药品');
xnode1 := xnode.AddChild('药品名');
xnode1.Text := IXMLNodesName.text;
if IXMLNodesAlias <> nil then
begin
xnode4 := xnode.AddChild('别名');
xnode4.Text := IXMLNodesAlias.text;
end;
xnode5 := xnode.AddChild('剂型');
xnode5.Text := IXMLNodesType.text;
if IXMLNodesEng <> nil then
begin
xnode6 := xnode.AddChild('英文名');
xnode6.Text := IXMLNodesEng.text;
end;
end;
is_name := false;
is_type := false;
XMLSearch.SaveToFile();
WebBrowser1.Navigate(temp_path + 'Medicine.xml');
Application.ProcessMessages;
end;
//这里是使检索完毕后,将临时文件添加的节点清除
IXML3 := XmlDomDoc^.Create();
IXML3.load(temp_path + 'Medicine.xml');
IXML3.removeChild(IXML3.documentElement);
do
mEle := IXML3.createElement('药品目录');
IXML3._Set_documentElement(DomEle);
IXML3.save(temp_path + 'Medicine.xml');
end;