我有这样的XML:
<SPPROFILES>
<----DATA------>
<PROFILES>
<PROFILE>
<ID>--------------</ID>
<NAME>------------</NAME>
<USERNAME>-----------</USERNAME>
</PROFILE>
</PROFILES>
</SPPROFILES>
Run Code Online (Sandbox Code Playgroud)
我想从XML获取用户名并显示它.
这是代码的一部分:
SFailedHMConnection = 'Could not connect to default database with username "-------".';
Run Code Online (Sandbox Code Playgroud)
用户名后面的"------"应该显示XML中的用户名,那么如何从XML中获取值并将其包含在消息中呢?
您可以使用XPath表达式获取USERNAME标记的值 /SPPROFILES/PROFILES/PROFILE/USERNAME
试试这个样本
{$APPTYPE CONSOLE}
uses
ComObj,
ActiveX,
Variants,
SysUtils;
const
XMLStr=
'<SPPROFILES>'+
' <PROFILES>'+
' <PROFILE>'+
' <ID>--------------</ID>'+
' <NAME>------------</NAME>'+
' <USERNAME>John Smith</USERNAME>'+
' </PROFILE>'+
' </PROFILES>'+
'</SPPROFILES>';
procedure test;
var
XmlDoc : OleVariant;
Node : OleVariant;
begin
XmlDoc := CreateOleObject('Msxml2.DOMDocument.6.0');
try
XmlDoc.Async := False;
XmlDoc.LoadXML(XMLStr);
XmlDoc.SetProperty('SelectionLanguage','XPath');
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node :=XmlDoc.selectSingleNode('/SPPROFILES/PROFILES/PROFILE/USERNAME');
if not VarIsClear(Node) then
Writeln(Node.Text);
finally
XmlDoc:=Unassigned;
end;
end;
begin
try
CoInitialize(nil);
try
test;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
end;
end;
finally
CoUninitialize;
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |