2012-12-26 65 views
6

Tôi đang tạo tệp xml bằng cách sử dụng php. XML kết quả là.Tạo nút XML có giá trị null trong php

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

Nhưng trong trường hợp nơi một giá trị là null xml kết quả là (nhìn vào chèn nút).

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

Nếu một giá trị là null Tôi muốn xml được tạo ra như vậy mà nó dẫn đến.

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

Đây là mã của tôi.

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

Tôi gửi xml này dưới dạng phản hồi sau khi tạo. Vì vậy, trong phía khách hàng các lastname nút đang trở thành một subnode của chèn khi nó là

<insertion/> 
+0

Dường như cùng một điều ... đó là cách thay thế viết tắt. Tôi không nếu nó sẽ tạo ra kết quả tương tự trong PHP. – codingbiz

+0

@codingbiz: bạn có thể cụ thể hơn không. không thể hiểu ý bạn là gì – Avinash

+1

cả hai đều giống nhau. – Zeina

Trả lời

0

gì đang được đầu ra theo mặc định được gọi là "định dạng tốc ký". Đó là XML hoàn toàn hợp lệ và mọi trình phân tích cú pháp XML được triển khai đúng cách sẽ có thể đối phó với nó một cách tốt đẹp. Lý do duy nhất tại sao tôi có thể nghĩ đến việc ép buộc đầu ra "dài" là nếu bạn phải nạp XML đã xuất ra vào một trình phân tích cú pháp lỗi và không thể xử lý trường hợp viết tắt. Nếu bạn có thể thay thế trình phân tích cú pháp có vấn đề bằng một trình phân tích có vấn đề thì tôi khuyên bạn nên thực hiện việc đó.

Nếu bạn hoàn toàn phải xuất phiên bản không viết tắt, thì các phương thức DOMDocument :: SaveXML() và DOMDocument :: save() sẽ cho phép bạn định cấu hình đầu ra của chúng. Một cờ có thể được thiết lập mà sẽ làm cho đầu ra được tiết ra thay vì viết tắt. Tuy nhiên, nó không được ghi chép trong tài liệu hướng dẫn sử dụng PHP. Mã sau đây sẽ minh họa cách nó hoạt động.

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

Thành thật mà nói, tôi không nghĩ có nhiều điểm để làm điều này nếu trình phân tích cú pháp định xử lý XML của bạn không phải là lỗi.

+1

Cảm ơn đề xuất của bạn. Tôi cho rằng việc sử dụng một trình phân tích cú pháp khác sẽ giải quyết được vấn đề của tôi. – Avinash

Các vấn đề liên quan