response-xml icon indicating copy to clipboard operation
response-xml copied to clipboard

How to add attribute to specific tag from generated XML

Open SendyHartanto opened this issue 3 years ago • 2 comments

So, i use array to send response like this :

$response = [ 'status' => 200, 'message' => 'Success', 'description' => '', 'data' => $user->toArray() ];

when i use return response()->xml($response); it return this :

<?xml version="1.0"?>
<response>
    <status>200</status>
    <message>Success</message>
    <description></description>
    <data>
        <id>25</id>
        <name>Test 10</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:20:02.000000Z</created_at>
        <updated_at>2021-01-07T03:20:02.000000Z</updated_at>
    </data>
    <data>
        <id>24</id>
        <name>Test 9</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:07:26.000000Z</created_at>
        <updated_at>2021-01-07T03:07:26.000000Z</updated_at>
    </data>
</response>

i want to add id attribute to <data> tag like this :

<response>
    <status>200</status>
   <message>Success</message>
    <description></description>
    <data id="user-25">
       <id>25</id>
       <name>Test 10</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:20:02.000000Z</created_at>
        <updated_at>2021-01-07T03:20:02.000000Z</updated_at>
    </data>

    <data id="user-24">
        <id>24</id>
        <name>Test 9</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:07:26.000000Z</created_at>
        <updated_at>2021-01-07T03:07:26.000000Z</updated_at>
    </data>
</response>

Any ideas to do that?

SendyHartanto avatar Jan 07 '21 08:01 SendyHartanto

oh sorry, i just figured it out.

just before i put $user to $response array, i add _attributes index in $user array like this :

foreach($user as $key => $value){
            $user[$key]['_attributes'] = [
                'id' => $value->id
            ];
}

now it return :

<?xml version="1.0"?>
<response>
    <status>200</status>
    <message>Success</message>
    <description></description>
    <data id="25">
        <id>25</id>
        <name>Test 10</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:20:02.000000Z</created_at>
        <updated_at>2021-01-07T03:20:02.000000Z</updated_at>
    </data>
    <data id="24">
        <id>24</id>
        <name>Test 9</name>
        <email>[email protected]</email>
        <email_verified_at>2021-01-05 12:12:12</email_verified_at>
        <photo></photo>
        <gender>male</gender>
        <role>2</role>
        <active>1</active>
        <deleted_at></deleted_at>
        <remember_token></remember_token>
        <created_at>2021-01-07T03:07:26.000000Z</created_at>
        <updated_at>2021-01-07T03:07:26.000000Z</updated_at>
    </data>
</response>

references : https://github.com/mtownsend5512/response-xml/issues/1

SendyHartanto avatar Jan 07 '21 08:01 SendyHartanto

Excellent. Hope this is added to the main documentation.

edgreenberg avatar Feb 01 '21 20:02 edgreenberg