From 99fd2aeb584e5af27a888b7d5538191fae4a3d0b Mon Sep 17 00:00:00 2001 From: freekmurze Date: Wed, 19 Jul 2023 18:31:21 +0000 Subject: [PATCH 1/4] Update CHANGELOG --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index efa9aef..7ba8ace 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to `array-to-xml` will be documented in this file +## 3.2.0 - 2023-07-19 + +### What's Changed + +- Bump dependabot/fetch-metadata from 1.4.0 to 1.5.1 by @dependabot in https://github.com/spatie/array-to-xml/pull/217 +- Bump dependabot/fetch-metadata from 1.5.1 to 1.6.0 by @dependabot in https://github.com/spatie/array-to-xml/pull/218 +- Added Closure value support by @SuperDJ in https://github.com/spatie/array-to-xml/pull/219 + +**Full Changelog**: https://github.com/spatie/array-to-xml/compare/3.1.6...3.2.0 + ## 3.1.6 - 2023-05-11 ### What's Changed From 25dbdce1d3d4ea4dd51b32dedd22a0382ac706d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 15:05:29 +0000 Subject: [PATCH 2/4] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/php-cs-fixer.yml | 2 +- .github/workflows/run-tests.yml | 2 +- .github/workflows/update-changelog.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/php-cs-fixer.yml b/.github/workflows/php-cs-fixer.yml index dac0c37..c830679 100644 --- a/.github/workflows/php-cs-fixer.yml +++ b/.github/workflows/php-cs-fixer.yml @@ -8,7 +8,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index cfd1faf..c249ddc 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index b20f3b6..94df2c3 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -10,7 +10,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: main From 82672819a6ef1775f87a0cf68c2cda80b445be6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Radovan=20=C5=A0mitala?= Date: Wed, 8 Nov 2023 09:19:27 +0100 Subject: [PATCH 3/4] Use-proper-NULL-value (#225) --- src/ArrayToXml.php | 21 ++++++++++++++++--- tests/ArrayToXmlTest.php | 5 +++-- ..._empty_string_and_null_value_to_xml__1.xml | 5 +++++ ...ert_an_array_with_null_value_to_xml__1.xml | 4 ---- 4 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_empty_string_and_null_value_to_xml__1.xml delete mode 100644 tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_null_value_to_xml__1.xml diff --git a/src/ArrayToXml.php b/src/ArrayToXml.php index eac1ec2..0053138 100644 --- a/src/ArrayToXml.php +++ b/src/ArrayToXml.php @@ -11,6 +11,7 @@ class ArrayToXml { protected DOMDocument $document; + protected DOMElement $rootNode; protected bool $replaceSpacesByUnderScoresInKeyNames = true; @@ -46,11 +47,11 @@ public function __construct( throw new DOMException('Invalid Character Error'); } - $root = $this->createRootElement($rootElement); + $this->rootNode = $this->createRootElement($rootElement); - $this->document->appendChild($root); + $this->document->appendChild($this->rootNode); - $this->convertElement($root, $array); + $this->convertElement($this->rootNode, $array); } public function setNumericTagNamePrefix(string $prefix): void @@ -201,10 +202,24 @@ protected function addNode(DOMElement $element, string $key, mixed $value): void } $child = $this->document->createElement($key); + + $this->addNodeTypeAttribute($child, $value); + $element->appendChild($child); $this->convertElement($child, $value); } + protected function addNodeTypeAttribute(DOMElement $element, mixed $value): void + { + if (is_null($value)) { + if (!$this->rootNode->hasAttribute('xmlns:xsi')) { + $this->rootNode->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + } + + $element->setAttribute('xsi:nil', 'true'); + } + } + protected function addCollectionNode(DOMElement $element, mixed $value): void { if ($element->childNodes->length === 0 && $element->attributes->length === 0) { diff --git a/tests/ArrayToXmlTest.php b/tests/ArrayToXmlTest.php index 74f80da..2fdd168 100644 --- a/tests/ArrayToXmlTest.php +++ b/tests/ArrayToXmlTest.php @@ -480,9 +480,10 @@ assertMatchesSnapshot($arrayToXml->dropXmlDeclaration()->toXml()); }); -it('can convert an array with null value to xml', function () { +it('can convert an array with empty string and null value to xml', function () { $arr = [ - 'test' => null, + 'testString' => '', + 'testNull' => null, ]; assertMatchesXmlSnapshot(ArrayToXml::convert($arr)); diff --git a/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_empty_string_and_null_value_to_xml__1.xml b/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_empty_string_and_null_value_to_xml__1.xml new file mode 100644 index 0000000..d2ef544 --- /dev/null +++ b/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_empty_string_and_null_value_to_xml__1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_null_value_to_xml__1.xml b/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_null_value_to_xml__1.xml deleted file mode 100644 index 179f597..0000000 --- a/tests/__snapshots__/ArrayToXmlTest__it_can_convert_an_array_with_null_value_to_xml__1.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - From 84a404e5b67dd21466a0ff47d335129d67b94029 Mon Sep 17 00:00:00 2001 From: freekmurze Date: Wed, 8 Nov 2023 08:19:46 +0000 Subject: [PATCH 4/4] Fix styling --- src/ArrayToXml.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ArrayToXml.php b/src/ArrayToXml.php index 0053138..cf43a99 100644 --- a/src/ArrayToXml.php +++ b/src/ArrayToXml.php @@ -212,7 +212,7 @@ protected function addNode(DOMElement $element, string $key, mixed $value): void protected function addNodeTypeAttribute(DOMElement $element, mixed $value): void { if (is_null($value)) { - if (!$this->rootNode->hasAttribute('xmlns:xsi')) { + if (! $this->rootNode->hasAttribute('xmlns:xsi')) { $this->rootNode->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); }