2012-12-26 8 views
6

Tworzę plik xml używając php. Wynikowy kod XML to.Tworzenie węzła XML z wartością pustą w php

<xml> 
    <data> 
    <firstname>Peter</firstname> 
    <insertion>V</insertion> 
    <lastname>John</lastname> 
    <gender>Male</gender> 
    </data> 
</xml> 

Jednak w przypadku, gdy wartość zerowa jest otrzymany XML jest (wygląd w węźle wprowadzania).

<xml> 
    <data> 
    <firstname>Peter</firstname> 
    <insertion/> 
    <lastname>John</lastname> 
    <gender>Male</gender> 
    </data> 
</xml> 

Jeśli wartość jest null Chcę xml być tworzone w taki sposób, że powoduje.

<xml> 
    <data> 
    <firstname>Peter</firstname> 
    <insertion></insertion> 
    <lastname>John</lastname> 
    <gender>Male</gender> 
    </data> 
</xml> 

To jest mój kod.

$doc = new DOMDocument('1.0'); 
    $doc->formatOutput = true; 
    $root = $doc->createElement('data'); 
    $doc->appendChild($root); 
    $data = $doc->createElement('data'); 
    $fname = $doc->createElement('firstname'); 
     $fname->appendChild(
       $doc->createTextNode($row['firstname'])); 
     $data->appendChild($fname); 

     $ins = $doc->createElement('insertion'); 
     $ins->appendChild(
       $doc->createTextNode($row['insertion'])); 
     $data->appendChild($ins); 

     $lname = $doc->createElement('lastname'); 
     $lname->appendChild(
       $doc->createTextNode($row['lastname'])); 
     $data->appendChild($lname); 

     $gender = $doc->createElement('gender'); 
     $gender->appendChild(
       $doc->createTextNode($row['gender'])); 
     $data->appendChild($gender); 
     $root->appendChild($data); 
$doc->save($path . "test.xml"); 

Wysyłam ten xml jako odpowiedź po utworzeniu. Tak więc w bok Client lastname węzeł staje się podwęzeł z wkładania gdy jest

<insertion/> 
+0

Wydaje się to samo ... to skrótowa alternatywa. Nie wiem, czy przyniosłoby to ten sam wynik w PHP. – codingbiz

+0

@codingbiz: czy mógłbyś być bardziej konkretny? nie można zrozumieć, co masz na myśli – Avinash

+1

zarówno i są takie same. – Zeina

Odpowiedz

0

Co jest wysyłany domyślnie nazywa się „skrótem Format”. Jest to całkowicie poprawny XML i każdy właściwie zaimplementowany analizator składni XML powinien być w stanie sobie z nim poradzić. Jedynym powodem, dla którego mogę wymyślić wymuszenie "longhandowego" rezultatu, jest to, że musisz podać wynikowy XML do parsera, który jest błędny i nie może obsłużyć tego skróconego przypadku. Jeśli możesz zastąpić problematyczny analizator składni działającym, to zamiast tego zalecam wykonanie tego.

Jeśli koniecznie trzeba wypisać wyjściową wersję, metody DOMDocument :: SaveXML() i DOMDocument :: save() umożliwiają skonfigurowanie ich wyników. Można ustawić flagę, która spowoduje, że dane wyjściowe będą pełne, a nie stenograficzne. Jednak nie jest to dobrze udokumentowane w podręczniku PHP. Poniższy kod powinien zilustrować, jak to działa.

$dom = new DOMDocument(); 
$dom -> loadXML ('<root><foo>foo</foo><bar></bar><baz>baz</baz></root>'); 

var_dump ($dom -> saveXML()); 
var_dump ($dom -> saveXML ($dom, LIBXML_NOEMPTYTAG)); 

Rzetelnie chociaż, nie sądzę, nie ma sensu, aby to zrobić, jeśli analizator przeznaczony do czynienia z XML nie jest wadliwy.

+1

Dzięki za Twoją sugestię. Przypuszczam, że użycie innego parsera rozwiąże mój problem. – Avinash

Powiązane problemy