2013-05-06 87 views
1

我正在处理基于XML的文档中某些字段的导入功能。Xliff - 如何使用Delphi读取属性?

阅读ansich值的工作很完美,不幸的是,我可以做到这一点并不真正属于翻译单元,即读取id。

我的代码:

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> 

我现在的问题是如何,我可以读跨单元ID?

+0

旁注,您不必通过使用'NewXMLDocument'来创建新文档并进行后续激活;为此,使用'LoadXMLDocument'函数就足够了。 – TLama 2013-05-06 15:11:30

回答

4

IXMLNodeListIXMLNode项目的集合,您可以通过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; 
+0

完美。感谢这个答案。 Im新的XML和解析。 – Hidden 2013-05-06 15:14:46

+0

不客气! – TLama 2013-05-06 15:16:08