2016-07-07 8 views
1

Ich versuche, eine XML-Datei mit Matlab zu schreiben und ich muss eine DOCTYPE-DTD in der Kopfzeile angeben, aber ich habe keine Methode dafür in der Matlab-Dokumentation oder Fragen gefunden. Jede Frage, die eine DTD-Referenz betrifft, ist, wie man ein XML in Matlab liest.Ein XML in Matlab schreiben: Wie man Verweis auf DTD hinzufügt?

Was ich in der Lage bin jetzt zu tun ist, eine XML-Datei des Typs

<?xml version="1.0"?> 
<root> 
    <child> 
     Hello world! 
    </child> 
</root> 

mit dem Code

docNode = com.mathworks.xml.XMLUtils.createDocument('root'); 
root = docNode.getDocumentElement; 

child = docNode.createElement('child'); 
child.appendChild(docNode.createTextNode('Hello World!')); 
root.appendChild(child); 

xmlwrite(docNode) 

Ich brauche aber die Datei einen DTD Hinweis enthalten:

<?xml version="1.0"?> 
<!DOCTYPE root SYSTEM "root.dtd" []> 
<root> 
    <child> 
     Hello world! 
    </child> 
</root> 

Gibt es eine Funktion in com.mathworks.xml.XMLUtils dafür? Oder muss ich das generierte XML öffnen und die DTD-Referenz manuell einfügen?

Antwort

0

Sie können mit dem org.w3c.dom Paket bleiben: Sie können die createDocumentType Methode von DOMImplementation verwenden.

domImpl = docNode.getImplementation(); 
doctype = domImpl.createDocumentType('root', 'SYSTEM', 'root.dtd'); 

Mit diesem Update die vollständige Beispielcode ist:

docNode = com.mathworks.xml.XMLUtils.createDocument('root'); 
domImpl = docNode.getImplementation(); 
doctype = domImpl.createDocumentType('root', 'SYSTEM', 'root.dtd'); 
docNode.appendChild(doctype); 

root = docNode.getDocumentElement; 

child = docNode.createElement('child'); 
child.appendChild(docNode.createTextNode('Hello World!')); 
root.appendChild(child); 

xmlwrite(docNode) 

Ausgabe

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE root PUBLIC "SYSTEM" "root.dtd"> 
<root> 
    <child>Hello World!</child> 
</root>