From 20473f09677540f5059e810ccfe8da4bda043648 Mon Sep 17 00:00:00 2001 From: webeweb Date: Sat, 17 Jul 2021 12:57:04 +0200 Subject: [PATCH] Update XML deserializer: - add xmlEntities() method --- src/Serializer/XmlDeserializerHelper.php | 27 ++++++++++++++- tests/AbstractTestCase.php | 12 ------- .../Serializer/XmlDeserializerHelperTest.php | 33 ++++++++++++++++++- tests/Serializer/XmlSerializerHelperTest.xml | 2 +- 4 files changed, 59 insertions(+), 15 deletions(-) diff --git a/src/Serializer/XmlDeserializerHelper.php b/src/Serializer/XmlDeserializerHelper.php index b69a477..aa09dfc 100644 --- a/src/Serializer/XmlDeserializerHelper.php +++ b/src/Serializer/XmlDeserializerHelper.php @@ -27,7 +27,7 @@ class XmlDeserializerHelper extends SerializerHelper { * * @param DOMNode $domNode The DOM node. * @param string $nodeName The node name. - * @return string|null Returns the attribute value in case of success, null otherwise. + * @return string|null Returns the text content in case of success, null otherwise. */ public static function getChildDomNodeTextContent(DOMNode $domNode, string $nodeName): ?string { @@ -128,4 +128,29 @@ public static function log(DOMNode $domNode): void { static::$logger->debug(sprintf('Deserialize a DOM node with name "%s"', $domNode->nodeName), $context); } + + /** + * Convert XML entities. + * + * @param string $filename The filename. + * @param string $encoding The encoding. + * @return string Returns the converted XML entities. + */ + public static function xmlEntities(string $filename, string $encoding = "utf-8"): string { + + $pattern = "/(<[A-Za-z_]*>)(.*)(<\/[A-Za-z_]*>)/"; + $content = file_get_contents($filename); + $callback = function($matches) use ($encoding) { + + $output = [ + $matches[1], + htmlentities($matches[2], ENT_XML1 | ENT_QUOTES, $encoding), + $matches[3], + ]; + + return implode("", $output); + }; + + return preg_replace_callback($pattern, $callback, $content); + } } \ No newline at end of file diff --git a/tests/AbstractTestCase.php b/tests/AbstractTestCase.php index 6980960..bb0bd5a 100644 --- a/tests/AbstractTestCase.php +++ b/tests/AbstractTestCase.php @@ -11,7 +11,6 @@ namespace WBW\Library\Provider\Tests; -use DOMDocument; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; @@ -24,13 +23,6 @@ */ abstract class AbstractTestCase extends TestCase { - /** - * DOM document. - * - * @var DOMDocument - */ - protected $document; - /** * Logger. * @@ -44,10 +36,6 @@ abstract class AbstractTestCase extends TestCase { protected function setUp(): void { parent::setUp(); - // Set a DOM document mock. - $this->document = new DOMDocument(); - $this->document->load(realpath(__DIR__ . "/Serializer/XmlSerializerHelperTest.xml")); - // Set a Logger mock. $this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); } diff --git a/tests/Serializer/XmlDeserializerHelperTest.php b/tests/Serializer/XmlDeserializerHelperTest.php index 85a16b3..e78c8d6 100644 --- a/tests/Serializer/XmlDeserializerHelperTest.php +++ b/tests/Serializer/XmlDeserializerHelperTest.php @@ -11,6 +11,7 @@ namespace WBW\Library\Provider\Tests\Serializer; +use DOMDocument; use WBW\Library\Provider\Serializer\XmlDeserializerHelper; use WBW\Library\Provider\Tests\AbstractTestCase; @@ -22,6 +23,36 @@ */ class XmlDeserializerHelperTest extends AbstractTestCase { + /** + * DOM document. + * + * @var DOMDocument + */ + private $document; + + /** + * Filename. + * + * @var string + */ + private $filename; + + /** + * {@inheritDoc} + */ + protected function setUp(): void { + parent::setUp(); + + // Set a filename mock. + $this->filename = realpath(__DIR__ . "/../Serializer/XmlSerializerHelperTest.xml"); + + $content = XmlDeserializerHelper::xmlEntities($this->filename); + + // Set a DOM document mock. + $this->document = new DOMDocument(); + $this->document->loadXml($content); + } + /** * Tests the getChildDomNodeAttribute() method. * @@ -29,7 +60,7 @@ class XmlDeserializerHelperTest extends AbstractTestCase { */ public function testGetChildDomNodeTextContent(): void { - $this->assertEquals("text content", XmlDeserializerHelper::getChildDomNodeTextContent($this->document->documentElement, "children")); + $this->assertEquals("text & content", XmlDeserializerHelper::getChildDomNodeTextContent($this->document->documentElement, "children")); $this->assertNull(XmlDeserializerHelper::getChildDomNodeTextContent($this->document->documentElement, "child")); } diff --git a/tests/Serializer/XmlSerializerHelperTest.xml b/tests/Serializer/XmlSerializerHelperTest.xml index a765441..0195420 100644 --- a/tests/Serializer/XmlSerializerHelperTest.xml +++ b/tests/Serializer/XmlSerializerHelperTest.xml @@ -2,5 +2,5 @@ - text content + text & content \ No newline at end of file