[php/xml] Hoe !DOCTYPE toevoegen aan XML?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Topicstarter
Ik ben er al dagen mee bezig maar ik krijg het niet voor elkaar om <!DOCTYPE test SYSTEM "test.dtd"> aan mijn XML toe te toevoegen. Ik heb het forum afgezocht, php.net doorgespit en de hulp van Google ingeroepen maar ik kan het gewoon niet vinden.

Om het klein te houden hier een simpel voorbeeld hoe ik de XML opbouw:
code:
1
2
3
4
5
6
7
8
9
10
$oXmlDoc = domxml_new_doc("1.0");
$oRoot = $oXmlDoc->create_element("root");
$oRoot = $oXmlDoc->append_child($oRoot);
$oElement = $oXmlDoc->create_element("element");
$oElement = $oRoot->append_child($oElement);

$oText = $oXmlDoc->create_text_node("textnode");
$oElement->append_child($oText);

print($oXmlDoc->dump_mem(true));

Dit geeft als output:
code:
1
2
3
4
<?xml version="1.0"?>
<root>
  <element>textnode</element>
</root>

Maar ik moet hebben:
code:
1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE test SYSTEM "test.dtd">
<root>
  <element>textnode</element>
</root>

Als iemand weet wat ik over het hoofd zie dan hoor ik het graag!

Acties:
  • 0 Henk 'm!

  • Ruja
  • Registratie: Oktober 2005
  • Laatst online: 05-07-2024
Op deze webpagina (4e reactie om 11h27) geeft men de tip om hiervoor de functie domxml_open_mem te gebruiken.

Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Let er op dat die functie enkel voor php 4 is; php 5 gebruikt weer een andere DOM-engine.

Correctie: xmldoc is domxml_open_mem() geworden. En tevens heb je deze functie: DomDocument->doctype.

[ Voor 61% gewijzigd door GX op 28-10-2005 10:11 ]


Acties:
  • 0 Henk 'm!

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Topicstarter
Ruja schreef op vrijdag 28 oktober 2005 @ 09:57:
Op deze webpagina (4e reactie om 11h27) geeft men de tip om hiervoor de functie domxml_open_mem te gebruiken.
Thanks!

Ik doe het nu zo:
code:
1
2
3
4
5
6
7
8
9
10
$oXmlDoc = domxml_open_mem("<?xml version=\"1.0\"?><!DOCTYPE test SYSTEM \"test.dtd\"><root></root>");
$oRoot = $oXmlDoc->document_element();
$oRoot = $oXmlDoc->append_child($oRoot);
$oElement = $oXmlDoc->create_element("element");
$oElement = $oRoot->append_child($oElement);

$oText = $oXmlDoc->create_text_node("textnode");
$oElement->append_child($oText);

print($oXmlDoc->dump_mem(true));

Het resultaat:
code:
1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE test SYSTEM "test.dtd">
<root>
  <element>textnode</element>
</root>

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

De bedoelde functie daarvoor is createDocumentType. Je creeërt eerst een XML implementatie, en bouwt daaruit een document. Dat levert de volgende code op (voor een HTML doctype, je kan zelf wel uitvogelen wat er anders moet staan):

PHP:
1
2
3
4
$implementation = new DOMImplementation();
$doctype = $implementation->createDocumentType("HTML", "4.01//EN",
      "http://www.w3.org/TR/html4/strict.dtd");     
$dom = $implementation->createDocument("", "", $doctype);
Dat $dom object is hetzelfde als het DOMDocument object. Zie verder de verschillende documentatie pagina's.

[ Voor 14% gewijzigd door JHS op 28-10-2005 11:47 ]

DM!