1

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;用户名&amp;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"」が欲しいのですが、何も表示されません。

ご協力ありがとうございました。

4

1 に答える 1

2

ID とステータスにノードとしてアクセスしようとしましたが、それらは「lang」ノードの属性です

以下を試してください(テストされていませんが、最初の「lang」ノードにアクセスする必要があります...複数の「lang」ノードがあるため、別のforループでラップする必要があります)

sLangId := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['id'];
sStatus := TransNodes[i].ChildNodes['lang'].firstChild.Attributes['status'];
于 2013-10-01T13:06:44.990 に答える