Đối tượng với XML PHP

Sử dụng gói XML Serializer, bạn có thể sử dụng đoạn mã sau để thực hiện chuyển đổi, như đã báo cáo trong câu trả lời này trên Stack Overflow

Show
function json_to_xml($json) {
  $serializer = new XML_Serializer();
  $obj = json_decode($json);

  if ($serializer->serialize($obj)) {
    return $serializer->getSerializedData();
  }
  else {
    return NULL;
  }
}

Ngoài ra, bạn có thể sử dụng đoạn mã sau đưa ra câu trả lời này cho cùng một câu hỏi

require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
';

Học thuyết OXM là một PHP 5. Dự án 3 dành cho ánh xạ đối tượng PHP sang XML cung cấp hỗ trợ để duy trì XML thành một hệ thống tệp thông qua các kỹ thuật Doctrine phổ biến

Ghi chú. Dự án này vẫn còn sơ khai và không được sử dụng cho bất kỳ mã nào liên quan đến sản xuất. API của nó vẫn chưa ổn định và không phải tất cả các tính năng đều chưa được triển khai. Bất kỳ sự giúp đỡ nào trong việc thúc đẩy dự án về phía trước sẽ được hoan nghênh. Hãy để forking bắt đầu

XmlEntityManager

Dựa trên EntityManager của dự án Doctrine 2 ORM. Các đối tượng được ánh xạ dưới dạng @XmlRootEntity có thể được quản lý bởi XmlEntityManager. Khi các đối tượng này được duy trì, chúng được lưu ở định dạng XML vào hệ thống tệp trong thư mục được cấu hình bởi người dùng và sơ đồ đặt tên

$user = new User();
$user->setId(1);
$user->setName("Malcolm Reynolds");
$user->setOccupation("Space Cowboy");

$em->persist($user);
$em->flush();            // saves marshalled user object as XML to the file system.

XmlEntityManager cũng cho phép truy cập vào các đối tượng loại kho lưu trữ để tải lại các thực thể

$user = $em->getRepository("User")->findById(1);

Xml Marshaller

OXM cũng cung cấp hỗ trợ hạng nhất cho Marshalling và Unmarshalling của các đối tượng PHP thành XML và ngược lại dựa trên các ý tưởng trong dự án ánh xạ Java Castor XML. Siêu dữ liệu lớp cho lớp được ánh xạ có thể được định cấu hình thông qua @Annotations, XML, Yaml hoặc thậm chí chính PHP. Marshallers sẽ sử dụng siêu dữ liệu lớp này để chuyển đổi các đối tượng đã xác định của bạn thành XML, cũng như đọc bằng XML và chuyển đổi chúng thành các đối tượng

Hành vi của quá trình sắp xếp theo thứ tự và sắp xếp lại hoàn toàn có thể định cấu hình bằng siêu dữ liệu lớp đã xác định. Bạn có thể chỉ định tên xml chính xác cho từng thành phần và cách chúng ánh xạ tới các trường trong lớp của bạn. Tất cả các thuộc tính, thành phần và nút "văn bản" XML đều được hỗ trợ, cũng như các bộ sưu tập

Marshallers được sử dụng bởi XmlEntityManager trong nội bộ, nhưng cũng được cung cấp để sử dụng như công dân hạng nhất trong mã của bạn cho bất cứ điều gì bạn cần. Điều này giúp làm việc với XML trong ứng dụng của bạn dễ dàng hơn rất nhiều vì bạn không thực sự phải nghĩ về nó nữa

Chúng ta có thể giải quyết vấn đề trên bằng hàm array_walk_recursive(). array_walk_recursive()   là một hàm PHP có sẵn. Hàm này chuyển đổi mảng thành tài liệu XML trong đó các khóa của mảng được chuyển đổi thành các giá trị và các giá trị của mảng được chuyển đổi thành phần tử của XML

Hãy chứng minh bằng một ví dụ đơn giản

Ví dụ

 'alex',
   'empdept' => 'account',
   'address' => array (
      'city' => 'michigan'
      ),
   );
   //This function create a xml object with element root.
   $xml = new SimpleXMLElement('');
   array_walk_recursive($array, array ($xml,'addChild'));
   print $xml->asXML();
?>

đầu ra


 alex 
 account 
 michigan 

Ghi chú

Nếu thông báo lỗi hiển thị như PHP Fatal error. Lỗi chưa xử lý. Không tìm thấy lớp 'SimpleXMLElement' thì chỉ cần cài đặt các gói php-xml, php-simplexml

Nhiều khi cần lưu trữ dữ liệu dưới dạng XML vào cơ sở dữ liệu hoặc vào tệp để sử dụng sau. Để thực hiện yêu cầu này cần chuyển đổi dữ liệu sang XML và lưu tệp XML. Các hàm mở rộng SimpleXML cung cấp bộ công cụ để chuyển đổi XML thành một đối tượng. Các đối tượng đó xử lý các bộ chọn thuộc tính bình thường và các bộ lặp mảng. ví dụ 1.  

php





        a 
        b 
        c 
4


        a 
        b 
        c 
5

 


        a 
        b 
        c 
6


        a 
        b 
        c 
7

        a 
        b 
        c 
8

        a 
        b 
        c 
9
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
01

        a 
        b 
        c 
0

        a 
        b 
        c 
1

        a 
        b 
        c 
2


        a 
        b 
        c 
3

        a 
        b 
        c 
4

        a 
        b 
        c 
5

        a 
        b 
        c 
1

        a 
        b 
        c 
7


        a 
        b 
        c 
3


        a 
        b 
        c 
3

        a 
        b 
        c 
40


        a 
        b 
        c 
3

        a 
        b 
        c 
42

        a 
        b 
        c 
43

        a 
        b 
        c 
4

        a 
        b 
        c 
45


        a 
        b 
        c 
46

        a 
        b 
        c 
4

        a 
        b 
        c 
5

        a 
        b 
        c 
49

        a 
        b 
        c 
50
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
01

        a 
        b 
        c 
52
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
01

        a 
        b 
        c 
54

        a 
        b 
        c 
55

        a 
        b 
        c 
56

_______63____958


        a 
        b 
        c 
3


        a 
        b 
        c 
3

        a 
        b 
        c 
61


        a 
        b 
        c 
3

        a 
        b 
        c 
63

        a 
        b 
        c 
43

        a 
        b 
        c 
9

        a 
        b 
        c 
66

        a 
        b 
        c 
67

        a 
        b 
        c 
68

        a 
        b 
        c 
69

        a 
        b 
        c 
70


        a 
        b 
        c 
46


        a 
        b 
        c 
46

        a 
        b 
        c 
73


        a 
        b 
        c 
46

        a 
        b 
        c 
42

        a 
        b 
        c 
43

        a 
        b 
        c 
77

        a 
        b 
        c 
43

        a 
        b 
        c 
69

        a 
        b 
        c 
80


        a 
        b 
        c 
81


        a 
        b 
        c 
81

        a 
        b 
        c 
83


        a 
        b 
        c 
81

        a 
        b 
        c 
8

        a 
        b 
        c 
69
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00

        a 
        b 
        c 
67
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00

        a 
        b 
        c 
4

        a 
        b 
        c 
91

        a 
        b 
        c 
67

        a 
        b 
        c 
93


        a 
        b 
        c 
81____958


        a 
        b 
        c 
81

________ 946 ________ 998 ________ 999


        a 
        b 
        c 
81


        a 
        b 
        c 
81
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
002


        a 
        b 
        c 
81

        a 
        b 
        c 
4

        a 
        b 
        c 
91

        a 
        b 
        c 
67
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00

        a 
        b 
        c 
69

        a 
        b 
        c 
56


        a 
        b 
        c 
46

        a 
        b 
        c 
58

_______63____958


        a 
        b 
        c 
3

________ 63 ________ 1016 ________ 64 ________ 1018


        a 
        b 
        c 
58

 


        a 
        b 
        c 
00

________ 601 ________ 65 ________ 603 ________ 943


        a 
        b 
        c 
05

        a 
        b 
        c 
68

        a 
        b 
        c 
07______100


        a 
        b 
        c 
09

        a 
        b 
        c 
68

        a 
        b 
        c 
11____100

 


        a 
        b 
        c 
3

        a 
        b 
        c 
14


        a 
        b 
        c 
3

        a 
        b 
        c 
16

        a 
        b 
        c 
68

        a 
        b 
        c 
03

        a 
        b 
        c 
43


        a 
        b 
        c 
3

        a 
        b 
        c 
21

        a 
        b 
        c 
68

        a 
        b 
        c 
23
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00


        a 
        b 
        c 
3

        a 
        b 
        c 
26

        a 
        b 
        c 
68

        a 
        b 
        c 
28
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00


        a 
        b 
        c 
3

        a 
        b 
        c 
31

        a 
        b 
        c 
68

        a 
        b 
        c 
33


        a 
        b 
        c 
3

        a 
        b 
        c 
35


        a 
        b 
        c 
56

 


        a 
        b 
        c 
37


        a 
        b 
        c 
38

        a 
        b 
        c 
8

        a 
        b 
        c 
01______956


        a 
        b 
        c 
42

đầu ra


 alex 
 account 
 michigan 
8

Vấn đề trên có thể được giải quyết bằng hàm array_walk_recursive(). Hàm này chuyển đổi mảng thành tài liệu xml trong đó các khóa của mảng được chuyển đổi thành giá trị và giá trị của mảng được chuyển đổi thành phần tử của xml. ví dụ 2.  

php





        a 
        b 
        c 
4


        a 
        b 
        c 
5

 


        a 
        b 
        c 
45

________ 601 ________ 65 ________ 603 ________ 943


        a 
        b 
        c 
3

        a 
        b 
        c 
51

        a 
        b 
        c 
68

        a 
        b 
        c 
53
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00


        a 
        b 
        c 
3

        a 
        b 
        c 
56

        a 
        b 
        c 
68

        a 
        b 
        c 
58
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00


        a 
        b 
        c 
3


        a 
        b 
        c 
3

        a 
        b 
        c 
62


        a 
        b 
        c 
3

        a 
        b 
        c 
64

        a 
        b 
        c 
68

        a 
        b 
        c 
03

        a 
        b 
        c 
43


        a 
        b 
        c 
46

        a 
        b 
        c 
69

        a 
        b 
        c 
68

        a 
        b 
        c 
71
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00


        a 
        b 
        c 
3

        a 
        b 
        c 
35


        a 
        b 
        c 
56

 


        a 
        b 
        c 
76

_______ 61


        a 
        b 
        c 
5

        a 
        b 
        c 
49 ________ 950

        a 
        b 
        c 
55 _______ 956

 


        a 
        b 
        c 
83


        a 
        b 
        c 
84


        a 
        b 
        c 
85

        a 
        b 
        c 
43

        a 
        b 
        c 
01
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00

        a 
        b 
        c 
03

        a 
        b 
        c 
43

        a 
        b 
        c 
1
require_once 'XML/Serializer.php';

$data = json_decode($json, true)

// An array of serializer options.
$serializer_options = array (
  'addDecl' => TRUE,
  'encoding' => 'ISO-8859-1',
  'indent' => '  ',
  'rootName' => 'json',
  'mode' => 'simplexml'
); 

$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);

if (PEAR::isError($status)) {
  die($status->getMessage());
}

echo '
';
echo htmlspecialchars($Serializer->getSerializedData());
echo '
00

        a 
        b 
        c 
93

        a 
        b 
        c 
93

 


        a 
        b 
        c 
95


        a 
        b 
        c 
96

        a 
        b 
        c 
1____1018


        a 
        b 
        c 
42

đầu ra


        a 
        b 
        c 

Ghi chú. Nếu hệ thống tạo lỗi loại. PHP Lỗi nghiêm trọng. Lỗi chưa xử lý. Không tìm thấy lớp 'SimpleXMLElement' trong /home/6bc5567266b35ae3e76d84307e5bdc78. php. 24 thì chỉ cần cài đặt các gói php-xml, php-simplexml