XMLWriter ile Takip alanı bildirimleri

2 Cevap php

Ben (! PHP) bir XML webcoder üzerinde çalışıyorum, ve şeyler 'doğru' yapmak için, ben bunun yerine sadece dizeleri concatinating ve iyi için umut yazar XMLWriter kullanmak istiyorum.

WriteElementNS> -> startElementNS ve - ben kullanıyorum her yerde XML ad kullanıyorum. Sorun, ben bu fonksiyonları yeni bir ad alanı bildirimi kullanmak her zaman da yazma olmasıdır.

Bu doğru söz dizimi olsa da, biraz gereksiz bulunuyor. Benim ad bildirimi sadece bir belge bağlamında kullanılan ilk defa yazılır emin olmak istiyorum.

XMLWriter ile bu konuda gitmek için kolay bir yolu var mı, yoksa ben bu ve bu yönetme elle subclassing şaşırıp.

Thanks, Evert

2 Cevap

Sen uri parametre olarak null iletebilirsiniz.

<?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>

Sen belgede, fe içinde istenilen yere bir kez ad yazabilirsiniz Üst öğesi:

$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);

Bu gibi bir şey bitmelidir

<?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>

Bu tür can sıkıcı xmlwriter bu bildirimleri takip etmez - bu geçersiz xml yazmak sağlar. Bu olabilir null olsa bile, aynı zamanda nitelik gereklidir can sıkıcı - ve üçüncü argüman, son değil.

$2c, *-pike