PHP XML thành mảng với các thuộc tính

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];
?>

Chạy ví dụ »

Đị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]

Giá trị tham số

Tham sốDescriptionparserBắt buộc. Chỉ định trình phân tích cú pháp XML thành usedataRequired. Chỉ định dữ liệu XML để phân tích cú pháp các giá trịBắt buộc. Chỉ định một mảng với các giá trị của XML dataindexOptional. Chỉ định một mảng có con trỏ tới vị trí của các giá trị trong giá trị

chi tiết kỹ thuật

Giá trị trả về. 1 thành công. 0 khi bị lỗiPhiên bản PHP. 4. 0+❮ Tham khảo trình phân tích cú pháp XML PHP

Chủ Đề