读取xml的ID和状态节点

时间:2013-10-01 08:56:39

标签: xml delphi delphi-xe3

我在使用Delphi读取一些xml节点时遇到问题。 我想从这个xml代码中读取id

示例:

<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>

我的程序应该在“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”'但他没有告诉我任何事情。

感谢您的帮助和时间。

1 个答案:

答案 0 :(得分:2)

您尝试将id和status作为节点访问,但这些是'lang'节点的属性

尝试以下方法(未经测试,但它应该访问第一个'lang'节点...它应该包含在另一个for循环中,因为你有一个'lang'节点)

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