getDomFromString('AAA'); self::assertTrue($reader->elementExists('/element/child')); self::assertEquals('AAA', $reader->getElement('/element/child')->textContent); self::assertEquals('AAA', $reader->getValue('/element/child')); self::assertEquals('test', $reader->getAttribute('attr', $reader->getElement('/element'))); self::assertEquals('subtest', $reader->getAttribute('attr', $reader->getElement('/element'), 'child')); } /** * Test reading XML from zip. */ public function testDomFromZip(): void { $archiveFile = __DIR__ . '/../_files/xml/reader.zip'; $reader = new XMLReader(); $reader->getDomFromZip($archiveFile, 'test.xml'); self::assertTrue($reader->elementExists('/element/child')); self::assertFalse($reader->getDomFromZip($archiveFile, 'non_existing_xml_file.xml')); } /** * Test that read from non existing archive throws exception. */ public function testThrowsExceptionOnNonExistingArchive(): void { $this->expectException(Exception::class); $archiveFile = __DIR__ . '/../_files/xml/readers.zip'; $reader = new XMLReader(); $reader->getDomFromZip($archiveFile, 'test.xml'); } /** * Test elements count. */ public function testCountElements(): void { $reader = new XMLReader(); $reader->getDomFromString('AAABBB'); self::assertEquals(2, $reader->countElements('/element/child')); } /** * Test read non existing elements. */ public function testReturnNullOnNonExistingNode(): void { $reader = new XMLReader(); self::assertEmpty($reader->getElements('/element/children')); $reader->getDomFromString('AAA'); self::assertNull($reader->getElement('/element/children')); self::assertNull($reader->getValue('/element/children')); } /** * Test that xpath fails if custom namespace is not registered. */ public function testShouldThrowExceptionIfNamespaceIsNotKnown(): void { try { $reader = new XMLReader(); $reader->getDomFromString('AAA'); self::assertTrue($reader->elementExists('/element/test:child')); self::assertEquals('AAA', $reader->getElement('/element/test:child')->textContent); self::fail(); } catch (Exception $e) { self::assertTrue(true); } } /** * Test reading XML with manually registered namespace. */ public function testShouldParseXmlWithCustomNamespace(): void { $reader = new XMLReader(); $reader->getDomFromString('AAA'); $reader->registerNamespace('test', 'http://phpword.com/my/custom/namespace'); self::assertTrue($reader->elementExists('/element/test:child')); self::assertEquals('AAA', $reader->getElement('/element/test:child')->textContent); } /** * Test that xpath fails if custom namespace is not registered. */ public function testShouldThowExceptionIfTryingToRegisterNamespaceBeforeReadingDoc(): void { $this->expectException(InvalidArgumentException::class); $reader = new XMLReader(); $reader->registerNamespace('test', 'http://phpword.com/my/custom/namespace'); } }