2012-05-30 76 views
2

鑑於下面的XML片段,我如何獲得XML屬性TEXT的值?如何獲取XML屬性的值?

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

負...

MY碼...:

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; 

回答

2

可以使用XMLDataBinding(文件/新建/行吟/ XML/XMLDataBinding)轉換成XML德爾福類,選擇你的「Alexa.XML」文件。 德爾福將生成一個文件(例如Alexa.pas)與接口和類來處理您的XML數據。

通過映射到Delphi類的XML,您可以輕鬆瀏覽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; 

希望這可以幫助你!

3

您可以使用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. 
9

使用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; 
1
isim:=baslangic.ChildNodes['POPULARITY'].AttributeNodes['TEXT'].text; 

我發現..謝謝。