2015-05-26 38 views
2

使用盾會4.3,創建具有如何使用Delphi/ADOM(OpenXML)設置xml DOCTYPE?

DI := TDomImplementation.Create; 
Doc := TDomDocumentNS.Create(DI) 

如何設置在生成的XML文檔的

<!DOCTYPE ... 

線一個新的文件? /不在該文件的保存字符串列表中插入此行/

創建文檔後,該文檔的Doctypedecl屬性是隻讀的,實際上是NIL,那麼如何實現此目的?謝謝。

回答

3

可以讓DOM實現創建IDOMDocumentType一個實例,你可以創建文檔時使用:

program test; 

{$APPTYPE CONSOLE} 

{$R *.res} 

uses 
    System.SysUtils, 
    Xml.adomxmldom, 
    Xml.XmlDom, 
    Xml.XmlDoc; 

procedure Main; 
var 
    DomImpl: IDOMImplementation; 
    Doc: TXMLDocument; 
begin 
    DomImpl := GetDOM(sAdom4XmlVendor); 
    Doc := TXMLDocument.Create(nil); 
    try 
    Doc.DOMVendor := GetDOMVendor(sAdom4XmlVendor); 
    Doc.DOMDocument := DomImpl.createDocument('http://www.w3.org/2000/svg', 'svg:svg', 
     DomImpl.createDocumentType('svg:svg', '-//W3C//DTD SVG 1.1//EN', 
     'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd')); 
    Doc.SaveToFile(ChangeFileExt(ParamStr(0), '.xml')); 
    finally 
    Doc.Free; 
    end; 
end; 

begin 
    try 
    Main; 
    except 
    on E: Exception do 
    begin 
     ExitCode := 1; 
     Writeln(Format('[%s] %s', [E.ClassName, E.Message])); 
    end; 
    end; 
end. 

上面的代碼產生以下輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > 
<svg:svg/>