dichiarazioni di namespace monitoraggio con XMLWriter
-
13-09-2019 - |
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
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