2013-10-01 3 views
1

의 statusnodes는 델파이와 함께 일부 XML 노드를 읽기에 문제가 있습니다. 나는이 XML 코드에서 ID를 읽을 수읽기 ID 및 XML

예 :

<row name="String.101" status="new" comment=""> 
     <native>&quot;User Name&quot;</native> 
     <lang id="en" status="ready">&quot;User Name&quot;</lang> 
     <lang id="fr" status="translated">&quot;Nom d&apos;utilisateur&quot;</lang> 
     <lang id="hu" status="translated">&quot;Felhasználó neve&quot;</lang> 
     <lang id="it" status="translated">&quot;Nome utente&quot;</lang> 
     <lang id="zh" status="translated">&quot;用户名&quot;</lang> 
     <lang id="de" status="ready">&quot;Benutzername&quot;</lang> 
    </row> 

내 프로그램은 나에게 보여해야한다 'EN'에서 "ID ="EN 사용자 이름 "에서" '하지만 나를 보여줍니다 " 줄의 끝. 내 오류 내 델파이 코드에

?

begin 
     TransNodes := XMLDocument.DocumentElement.ChildNodes['targets'].ChildNodes['target'].ChildNodes['stringdata'].ChildNodes; 

     for i := 0 to TransNodes.Count -1 do 
     begin 
     sContext  := TransNodes[i].Attributes['name']; 
     sOriginalStatus := TransNodes[i].Attributes['status']; 
     sNativeText  := TransNodes[i].ChildNodes['native'].Text; 
     sLangId   := TransNodes[i].ChildNodes['id'].Text; 
     sStatus   := TransNodes[i].ChildNodes['status'].Text; 
     Delete(sNativeText, Length(sNativeText), 1); 
     Delete(sNativeText, 1, 1); 
     Delete(sLangId, Length(sLangId), 1); 
     Delete(sLangId, 1, 1); 
     Delete(sStatus, Length(sStatus), 1); 
     Delete(sStatus, 1, 1); 


     Memo.Lines.Add(sContext + ' ' + sOriginalStatus + ' ' + sNativeText + ' ' + sLangId + ' ' + sStatus); 

은 내가 .Attributes 델파이 shwos 나에게 오류 ... .Attributes와 .ChildNodes 그것을 시도했다.,상태와 동일한 문제입니다. 예를 들어 'status = "ready"'를 원하지만 그는 나에게 아무 것도 보여주지 않습니다.

여러분의 도움과 시간을 주셔서 감사합니다.

+0

죄송합니다. 첫 번째 링크는 잘못되었습니다! 이것이 맞습니다.) https://www.dropbox.com/sh/zoyudjkn4oevtt4/LbHmzPfdpU/Share/2013/10#lh:null-xml%20code.png – Umberto

+0

삭제 (... 코드 라인, 당신은 당신의 결과를 삭제할 수 있습니다? – fuchs777

+1

나는 그것을 시도했지만 아무것도 무슨 일이 생긴 없습니다. 그것은 늘 나에게 내가 필요로하는 메시지를 표시합니다. – Umberto

답변

2

당신은 노드로 ID와 상태를 액세스하려고하지만 사람들은

는 테스트하지 (다음하지만 첫 'LANG'노드에 액세스해야을 시도 'LANG'노드의 속성입니다 ... 그것은 포장한다 'lang'노드가 여러 개 있기 때문에 다른 for 루프에서)

sLangId := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['id']; 
sStatus := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['status'];