PHP DOM XML->XMLNS

PHP DOM XML->XMLNS

Innleggav Moldarin » tir 29.01.2008 2:05

Hei, ☺

Hvordan bruker jeg PHP DOM XML til å samle alle XMLNS under root elementet? Se koden under i samhør med output og ønsket output.

Kode: Merk alt
<?php
   $XML = new DOMDocument("1.0", "UTF-8");
   $Atom = $XML->appendChild($XML->createElementNS("http://www.w3.org/2005/Atom", "feed"));
   $Atom->appendChild($XML->createElementNS("http://www.w3.org/1999/xhtml", "xht:strong", "fet tekst"));
   $Atom->appendChild($XML->createElementNS("http://www.w3.org/1999/xhtml", "xht:strong", "fet tekst2"));
   $XML->formatOutput = true;
   printf($XML->saveXML()); ?>

Output skrev:<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<xht:strong xmlns:xht="http://www.w3.org/1999/xhtml">fet tekst</xht:strong>
<xht:strong xmlns:xht="http://www.w3.org/1999/xhtml">fet tekst2</xht:strong>
</feed>

Ønsket output skrev:<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xht="http://www.w3.org/1999/xhtml">
<xht:strong>fet tekst</xht:strong>
<xht:strong>fet tekst2</xht:strong>
</feed>
Sist endret av Moldarin den tir 29.01.2008 3:12, endret 1 gang

Brukerens avatar
medlem i 222 måneder
 

Re: PHP DOM XML->XMLNS

Innleggav mikaelb » tir 29.01.2008 2:59

Hvorfor ikke bare bruke setAttribute() eller lignende?

Eksempel:
Kode: Merk alt
<?php
$XML 
= new DOMDocument("1.0""UTF-8");
$Atom $XML->appendChild($XML->createElementNS("http://www.w3.org/2005/Atom""feed"));
$Atom->setAttribute('xmlns:xht''http://www.w3.org/1999/xhtml');
$XHTML $Atom->appendChild($XML->createElement("xht:strong""fet tekst"));
$XML->formatOutput true;
printf($XML->saveXML());
?>

Brukerens avatar
medlem i 208 måneder
 

Re: PHP DOM XML->XMLNS

Innleggav Moldarin » ons 30.01.2008 2:12

Jeg kan prøve å forklare problemstillingen bedre. Koden under feiler pga. to ting. Det første er at jeg ikke har brukt appendXML riktig, og det andre er at samme funksjonen feiler på ns‐feil fordi den ikke greier å forholde seg til linje fem som en faktisk xmlns deklarasjon.

Kode: Merk alt
<?php
$XML = new DOMDocument("1.0", "UTF-8");
$Atom = $XML->appendChild($XML->createElementNS("http://www.w3.org/2005/Atom", "feed"));
$Atom->setAttribute("xmlns:xht", "http://www.w3.org/1999/xhtml");
$Entry = $Atom->appendChild($XML->createElement("entry"));
$EntrySummary = $Entry->appendChild($XML->createElement("summary"));
$EntrySummary->setAttribute("type", "xhtml");
$EntrySummary->appendXML("<xht:p>XHTML paragraf 1</xht:p><xht:p>annen paragraf</xht:p>");
$XML->formatOutput = true;
printf($XML->saveXML());

Hele problemet mitt er: Hvordan løser jeg denne floka? Jeg må bruke appendXML fordi det er den eneste fornuftige måten å hente inn udeklarert XHTML til XML fra en database.

For referanse, ønsket output av koden over skulle ha blitt:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xht="http://www.w3.org/1999/xhtml">
<entry>
<summary type="xhtml">
<xht:p>XHTML paragraf 1</xht:p>
<xht:p>annen paragraf</xht:p>
</summary>
</entry>
</feed>

Brukerens avatar
medlem i 222 måneder
 

Re: PHP DOM XML->XMLNS

Innleggav Moldarin » tor 14.02.2008 4:53

Løsningen var å kalle på XMLNS sitt eget namespace.

Kode: Merk alt
setAttributeNS("http://www.w3.org/2000/xmlns", "xmlns:xht", "http://www.w3.org/1999/xhtml");

Brukerens avatar
medlem i 222 måneder
 


Returner til PHP



Hvem er i Forumene

Registrerte brukere: Google [Bot]