Domanda

Sto lavorando su un webservice XML (in PHP!), E al fine di fare le cose 'a destra', voglio usare XMLWriter invece di concatinating stringhe e sperando per il meglio.

sto utilizzando namespace XML in tutto il mondo utilizzando -> startElementNS e -> writeElementNS. Il problema, è che ogni volta che uso queste funzioni una nuova dichiarazione dello spazio dei nomi è anche scrittura.

Mentre questo è sintassi corretta, è un po 'inutili. Mi piacerebbe assicurarsi che la mia dichiarazione dello spazio dei nomi è scritto solo la prima volta viene utilizzato nel contesto di un documento.

C'è un modo semplice per andare su questo con XMLWriter, o sono io bloccato sottoclassi questo e la gestione di questa operazione manualmente.

Grazie, Evert

È stato utile?

Soluzione

È possibile passare NULL come il parametro uri.

<?php
$w = new XMLWriter;
$w->openMemory();
$w->setIndent(true);
$w->startElementNS('foo', 'bar', 'http://whatever/foo');
$w->startElementNS('foo', 'baz', null);
$w->endElement();
$w->endElement();
echo $w->outputMemory();
prints
<foo:bar xmlns:foo="http://whatever/foo">
 <foo:baz/>
</foo:bar>

Altri suggerimenti

È possibile scrivere lo spazio dei nomi, una volta nella posizione desiderata nel documento, f.e. nell'elemento superiore:

$writer = new XMLWriter(); 
$writer->openURI('php://output'); 
$writer->startDocument('1.0'); 

$writer->startElement('sample');            
$writer->writeAttributeNS('xmlns','foo', null,'http://foo.org/ns/foo#');
$writer->writeAttributeNS('xmlns','bar', null, 'http://foo.org/ns/bar#');

$writer->writeElementNS('foo','quz', null,'stuff here');
$writer->writeElementNS('bar','quz', null,'stuff there');

$writer->endElement();
$writer->endDocument();
$writer->flush(true);

Questo dovrebbe finire qualcosa come

<?xml version="1.0"?>
<sample xmlns:foo="http://foo.org/ns/foo#" xmlns:bar="http://foo.org/ns/bar#">
 <foo:quz>stuff here</foo:quz>
 <bar:quz>stuff there</bar:quz>
</sample>

Si tratta di una sorta di fastidioso XmlWriter pretende molto tenere traccia di tali dichiarazioni - permette di scrivere XML non valido. E 'anche fastidioso è richiesto l'attributo, anche se può essere nullo -. E che il suo il terzo argomento, non l'ultimo

$ 2c, * -Pike

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top