Xliff - Как читать атрибуты с Delphi?

Я работаю над функцией импорта для определенных полей в XML-документе.

Чтение значений ansich работает отлично, к сожалению, я могу сделать это, на самом деле это не атрибуты транс-единицы, а именно чтение идентификатора.

Мой код:

procedure TForm2.importXliff;
var
  i: Integer;
  TransUnits: IXMLNodeList;
  ID: IXMLNodeList;
begin
  if OpenDialog.Execute then
  begin
    //XMLDocument erzeugen und xml-Datei laden
    xmlDoc := newXMLDocument;
    xmlDoc.LoadFromFile(OpenDialog.FileName);
    Memo1.Lines := xmlDoc.XML;
    xmlDoc.Active := True;
    TransUnits := xmlDoc.DocumentElement.ChildNodes['file'].ChildNodes['body'].ChildNodes;
    ID := xmlDoc.DocumentElement.ChildNodes['body'].ChildNodes;

      for i := 0 to TransUnits.Count-1 do
        ListBox.Items.Add(TransUnits[i].ChildNodes['source'].Text);
        //xmlDoc.DocumentElement.ChildNodes['trans-unit'].AttributeNodes['id'].Text
  end;
 end;

Мой текстовый документ на основе xml (файл Xliff):

<xliff version="1.1">
  <file original="myfile.ext" datatype="plaintext" Source-language="en-US" target-language="fr-FR">
    <body>
      <trans-unit id='#1'>
        <source>Der Text.</source>
        <target>Le texte.</target>
      </trans-unit>

      <trans-unit id='#2'>
        <source>Das Flugzeug</source>
        <target>l'avion.</target>
      </trans-unit>

      <trans-unit id='#3'>
        <source>Der Baum.</source>
      </trans-unit>

   </body>
  </file>
</xliff>

Теперь у меня вопрос, как я могу прочитать идентификатор транс-единицы?

1 ответ

Решение

IXMLNodeList это коллекция IXMLNode элементы, в которых вы можете получить доступ к атрибутам по имени через Attributes имущество. В псевдокоде это может выглядеть так:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  TransUnits: IXMLNodeList;
  XMLDocument: IXMLDocument;
begin
  XMLDocument := LoadXMLDocument('d:\File.xml');
  if Assigned(XMLDocument) then
  begin
    TransUnits := XMLDocument.DocumentElement.ChildNodes['file'].ChildNodes['body'].ChildNodes;
    for I := 0 to TransUnits.Count - 1 do
      ShowMessage(TransUnits[I].Attributes['id']);
  end;
end;
Другие вопросы по тегам