XMLDocumnet如何读取XML里的属性值
有一段XML报文:
<?xml version="1.0" encoding="UTF-8"?>
<Values version="2.0">
<array name="resultDocumentList" type="record" depth="1">
<record javaclass="com.wm.util.Values">
<value name="agencyNo "> HXDL-00001</value>
<value name="lowerValue">PC0200C000000001</value>
<value name="upperValue">PC0200C000000100</value>
</record>
</array>
</Values>
想读取红色字休的值,用XMLDocumnet控件怎么来读取,我测试了一整天都没能读出来,有没有哪位大虾有写过类似的代码,请指点迷津,万分感谢!
[解决办法]
声明IXMLNode变量。给段代码给你参考下。
Myxml := TXMLDocument.Create(nil);
Myxml.LoadFromFile(sFilePath);
Myxml.Active := True;
Root := Myxml.DocumentElement;
Next_Node := Root.ChildNodes.First;
while Next_Node <> nil do
begin
if Next_Node.LocalName = 'ParaCode' then
begin
Rec_Nod := Next_Node.ChildNodes.First;
while Rec_Nod <> nil do
begin
if Rec_Nod.LocalName = 'Rec' then
begin
Field_Node := Rec_Nod.ChildNodes.First;
New(p);
while Field_Node <> nil do
begin
if LowerCase(Field_Node.Attributes['code']) = LowerCase('CardID') then
begin
p.CardID := Trim(Field_Node.Text);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('cardType') then
begin
p.icklx := StrToInt(Field_Node.Text);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('blackType') then
begin
p.blackType := StrToInt(Field_Node.Text);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('occurTime') then
begin
p.occurTime := StrToDateTimeDef(Field_Node.Text, Now);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('ExpireTime') then
begin
p.ExpireTime := StrToDateTimeDef(Field_Node.Text, Now);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('validFlag') then
begin
p.validFlag := StrToIntDef(Field_Node.Text, 0);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('RegisterOrgId') then
begin
p.RegisterOrgId := StrToIntDef(Field_Node.Text, 0);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('registerOperatorId') then
begin
p.registerOperatorId := StrToIntDef(Field_Node.Text, 0);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('spare1') then
begin
p.spare1 := StrToIntDef(Field_Node.Text, 0);
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('spare2') then
begin
p.spare2 := Field_Node.Text;
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('remarks') then
begin
p.remarks := Field_Node.Text;
end else if LowerCase(Field_Node.Attributes['code']) = LowerCase('version') then
begin
p.version := Field_Node.Text;
if p.version>g_ETC_para_ver.blackcard_version then g_ETC_para_ver.blackcard_version:=p.version;
end;
Field_Node := Field_Node.NextSibling;
end;
TmpList.Add(p);
end;
Rec_Nod := Rec_Nod.NextSibling;
end;
end;
Next_Node := Next_Node.NextSibling;
end;