Tôi đang trải qua những hành vi sau đây:PHP, SimpleXML, giải mã các thực thể trong CDATA
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
Các tài liệu php nói rằng NOCDATA "Hợp nhất [s] CDATA như các nút văn bản". Với tôi điều này có nghĩa là CDATA sau đó sẽ được xử lý giống như các nút văn bản - hoặc hành vi của ví dụ thứ 3 bây giờ sẽ giống như ví dụ thứ 2.
Tôi không có quyền kiểm soát XML (đó là nguồn cấp dữ liệu từ nguồn bên ngoài), nếu không tôi chỉ xóa thẻ CDATA vì không có gì và hủy hoại hành vi tôi muốn.
Tại sao ví dụ trên hoạt động theo cách thực hiện? Có cách nào để làm cho SimpleXML xử lý các nút CDATA giống như cách nó xử lý các nút văn bản không? "Merge CDATA như các nút văn bản" thực sự làm gì, vì tôi dường như không hiểu được lựa chọn đó?
Tôi hiện đang giải mã sau khi tôi lấy dữ liệu ra, nhưng ví dụ trên vẫn không có ý nghĩa với tôi.
'print' có ngữ cảnh chuỗi không cần phải đúc thành chuỗi trong trường hợp đó. – hakre
@hakre nhưng 'print' (thường được viết là' echo') có thể được sử dụng như một phần mềm đứng trong khi gỡ lỗi sau đó được thay thế bằng một thứ khác, vì vậy tôi muốn nói rằng đó là thói quen tốt để thực hiện chuỗi tránh nhầm lẫn sau này. – IMSoP