Một nhu cầu phổ biến khi làm việc trong PHP là cách chuyển đổi tài liệu XML thành một mảng có thể tuần tự hóa. Nếu bạn đã từng thử serialize[] và sau đó unserialize[] một đối tượng SimpleXML hoặc DOMDocument, bạn sẽ biết tôi đang nói về điều gì
Giả sử đoạn mã XML sau
Brian Chris Meg
Có một cách nhanh chóng và bẩn thỉu để chuyển đổi một tài liệu như vậy thành một mảng, sử dụng truyền kiểu và các hàm JSON để đảm bảo không có giá trị kỳ lạ nào có thể gây ra sự cố khi hủy xác thực hóa
$a = json_decode[json_encode[[array] Convertor::covertToArray[$s]], true];
Đây là kết quả cho XML mẫu của chúng tôi, ví dụ: nếu chúng tôi print_r[$a]
Array
[
[show] => Array
[
[@attributes] => Array
[
[name] => Family Guy
]
[dog] => Brian
[kid] => Array
[
[0] => Chris
[1] => Meg
]
]
]
Khá tiện lợi nhỉ? . sau đó chúng ta cần một nút CDATA…
Brian
Chris
Meg
Stewie]]>
Đoạn mã XML ở trên sẽ mang lại kết quả như sau
Array
[
[show] => Array
[
[@attributes] => Array
[
[name] => Family Guy
]
[dog] => Brian
[kid] => Array
[
[0] => Chris
[1] => Meg
[2] => Array
[
]
]
]
]
Điều đó không hữu ích lắm. Chúng tôi gặp rắc rối vì nút CDATA, một SimpleXMLEuity, đang được chuyển thành một mảng thay vì một chuỗi. Để xử lý trường hợp này trong khi vẫn giữ ký hiệu @attributes đẹp mắt, chúng ta cần một chức năng chuyển đổi dài dòng hơn một chút. Đây là phiên bản của tôi, từ đây được phát hành theo giấy phép làm-bất-cứ-gì-nhưng-không-kiện-tôi
Kết quả, cho đoạn mã Stewie của chúng tôi
Array
[
[show] => Array
[
[@attributes] => Array
[
[name] => Family Guy
]
[dog] => Brian
[kid] => Array
[
[0] => Chris
[1] => Meg
[2] => Stewie
]
]
]
Chiến thắng là của tôi. . D
Đóng góp
[clh-code#1] Nếu một nút có thuộc tính, nhưng chỉ chứa văn bản, thì đầu ra sẽ là một mảng có cả khóa @content
và khóa
$resultArray = Convertor::covertToArray[$xml];0
❮ Tham khảo trình phân tích cú pháp XML PHP
Ví dụ
Phân tích cú pháp dữ liệu XML thành một mảng [từ lưu ý. xml]
$xmlparser = xml_parser_create[];
$fp = fopen["ghi chú. xml", "r"];
$xmldata = fread[$fp, 4096];
// Phân tích cú pháp dữ liệu XML thành một mảng
xml_parse_into_struct[$xmlparser,$xmldata,$values];
xml_parser_free[$xmlparser];
print_r[$values];
fclose[$fp];
?>
Định nghĩa và cách sử dụng
Hàm xml_parse_into_struct[] phân tích dữ liệu XML thành một mảng
Hàm này phân tích cú pháp dữ liệu XML thành 2 mảng
- Mảng giá trị - chứa dữ liệu từ XML được phân tích cú pháp
- Mảng chỉ mục - chứa các con trỏ tới vị trí của các giá trị trong mảng Giá trị
cú pháp
xml_parse_into_struct[trình phân tích cú pháp, dữ liệu, giá trị, chỉ mục]