0

次のような XML があります。

<SPPROFILES>
         <----DATA------>
         <PROFILES>
                  <PROFILE>
                           <ID>--------------</ID>
                           <NAME>------------</NAME>
                           <USERNAME>-----------</USERNAME>
                  </PROFILE>
          </PROFILES>
</SPPROFILES>

XMLからユーザー名を取得して表示したい。

これはコードの一部です:

SFailedHMConnection = 'Could not connect to default database with username "-------".';

ユーザー名の後の "------" の代わりに、XML からユーザー名を表示する必要があります。XML から値を取得してメッセージに含めるにはどうすればよいでしょうか?

4

2 に答える 2

5

次のような 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.
于 2013-05-01T17:12:49.617 に答える