我在使用Delphi读取一些xml节点时遇到问题。 我想从这个xml代码中读取id
示例:
<row name="String.101" status="new" comment="">
<native>"User Name"</native>
<lang id="en" status="ready">"User Name"</lang>
<lang id="fr" status="translated">"Nom d'utilisateur"</lang>
<lang id="hu" status="translated">"Felhasználó neve"</lang>
<lang id="it" status="translated">"Nome utente"</lang>
<lang id="zh" status="translated">"用户名"</lang>
<lang id="de" status="ready">"Benutzername"</lang>
</row>
我的程序应该在“id =”en“'中显示'en',但它会在行尾给我显示”用户名“。
我的delphi代码中的错误在哪里?
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和.ChildNodes ...用.Attributes delphi给我一个错误。 状态相同的问题。我想要,例如,'status =“ready”'但他没有告诉我任何事情。
感谢您的帮助和时间。
答案 0 :(得分:2)
您尝试将id和status作为节点访问,但这些是'lang'节点的属性
尝试以下方法(未经测试,但它应该访问第一个'lang'节点...它应该包含在另一个for循环中,因为你有一个'lang'节点)
sLangId := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['id'];
sStatus := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['status'];