Ich versuche SimpleXML addChild-Methode des SimpleXMLElement (eigentlich ein SimpleXMLIterator, die eine Unterklasse von SimpleXMLElement ist), um untergeordnete Elemente hinzuzufügen.PHP SimpleXML-> addChild - unerwünschte leere Namespace Attribut
Mein Problem ist, dass das Quelldokument eine Mischung aus Elementen mit Namespaces und ohne enthält. Hier ist eine einfache (kein Wortspiel beabsichtigt) Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:a xmlns:ns1="http://www.abc.com">
</ns1:a>
Der PHP-Code ist:
$it = new SimpleXMLIterator ('./test.xml', 0, true);
$it->addChild('d', 'another!'); // adds new child element to parent's NS
$it->addChild('c', 'no namespace for me!', ''); // puts xmlns="" every time :(
//output xml in response:
header('Content-Type: text/xml');
echo $it->saveXML();
Das Problem - wie die Kommentar-Staaten - ist, dass, wenn ich will ein Kind Element platzieren mit kein Namensraum innerhalb des übergeordneten Elements mit einem Namespace, erhalte ich einen leerer XML-Namespace jedes Mal (Ausgabe von über PHP-Code) Attribut:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:a xmlns:ns1="http://www.abc.com">
<ns1:d>another!</ns1:d>
<c xmlns="">no namespace for me!</c>
</ns1:a>
Während bo th Web-Browser sowie XML-Parser (z.B. Xerces) scheint dieses überflüssige Markup nicht zu stören, ich finde es etwas nervig, dass ich es nicht zu sagen vermag, damit aufzuhören.
Wer hat eine Lösung oder übertrete ich?
:}
Rik, obwohl es immer noch erfordert, dass ich einen Namensraum habe, scheint es, dass Ihre Lösung eine gute Lösung ist - vor allem, wenn es sich um HTML handelt. Danke für Ihre schnelle Antwort und Antwort, sehr geschätzt. : D –