2

以下の XML スニペットから、XML 属性の値を取得するにはどうすればよいTEXTですか?

<POPULARITY URL="example.com"  SOURCE="panel" TEXT="27503270" />

ネガティブ...

私のコード...:

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
   if kontrol=0 then
   begin
      XMLDocument1.Active:=false;
      XMLDocument1.FileName:='http://data.alexa.com/data?cli=10&dat=snbamz&url=aliatabak.com';
      XMLDocument1.Active:=true;
   end;
   i:=1;
   baslangic:=XMLDocument1.DocumentElement.ChildNodes.FindNode('SD');
   repeat
      isim:=baslangic.ChildNodes.Nodes['??????'].Text;

      edit1.Text:=isim;

      i:=i+1;
      baslangic:=baslangic.NextSibling;
   Until baslangic=nil;

end;
4

4 に答える 4

12

IXMLNode.Attributes次のプロパティを使用します。

isim := VarToStr(baslangic.Attributes['TEXT']);

またはIXMLNode.AttributeNodesプロパティ:

Isim := baslangic.AttributeNodes.Nodes['TEXT'].Text;

または:

Attr := baslangic.AttributeNodes.FindNode('TEXT');
If Attr <> nil then
    isim := Attr.Text;
于 2012-05-30T02:57:54.027 に答える
4

XPath を使用して値を取得できます

このサンプルアプリを試す

{$APPTYPE CONSOLE}

{$R *.res}

uses
  MSXML,
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure GetInfoXML;
const
 URI='http://data.alexa.com/data?cli=10&dat=snbamz&url=aliatabak.com';
 OK       =200;
 COMPLETED=4;
var
  XMLHTTPRequest  : IXMLHTTPRequest;
  XMLDOMDocument  : IXMLDOMDocument;
  XMLDOMNode      : IXMLDOMNode;
begin
    XMLHTTPRequest := CreateOleObject('MSXML2.XMLHTTP') As IXMLHTTPRequest;
  try
    XMLHTTPRequest.open('GET', URI, False, EmptyParam, EmptyParam);
    XMLHTTPRequest.send('');
    if (XMLHTTPRequest.readyState = COMPLETED) and (XMLHTTPRequest.status = OK) then
    begin
      XMLDOMDocument := XMLHTTPRequest.responseXML  As IXMLDOMDocument2;
      //get the node 
      XMLDOMNode := XMLDOMDocument.selectSingleNode('//ALEXA/SD/POPULARITY');
      //get the "TEXT" attribute
      Writeln(Format('%s',[String(XMLDOMNode.attributes.getNamedItem('TEXT').Text)]));
    end;
  finally
    XMLHTTPRequest := nil;
  end;
end;

begin
 try
    CoInitialize(nil);
    try
      GetInfoXML;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
于 2012-05-30T02:32:50.990 に答える
2

「Alexa.XML」ファイルを選択して、XMLDataBinding (File/New/Othe/XML/XMLDataBinding) を使用して XML を Delphi クラスに変換できます。Delphi は、XML データを処理するためのインターフェイスとクラスを含むファイル(Alexa.pas など)を生成します。

XML を Delphi クラスにマッピングすると、XML データを簡単に調べることができます。

例:

function TYourClass.GetAlexaText(const FileName: string): string;
var
  XMLDoc1: TXMLDocument;
  Alexa: IXMLALEXAType;
begin
  XMLDoc1 := TXMLDocument.Create(Self);
  XMLDoc1.FileName := FileName;
  XMLDoc1.Active := True;
  Alexa := GetAlexa(XMLDoc1);
  Result := IntToStr(Alexa.SD[1].POPULARITY.TEXT);
end;

これがお役に立てば幸いです!

于 2012-05-30T01:11:38.100 に答える
1
isim:=baslangic.ChildNodes['POPULARITY'].AttributeNodes['TEXT'].text;

私は見つけました..ありがとう。

于 2012-05-30T22:34:50.143 に答える