Skip to content

Version 3.0.0

Compare
Choose a tag to compare
@veewee veewee released this 14 Jan 13:07
· 9 commits to 3.x since this release
3.0.0
90affd5

What's Changed

  • Add reader MatchingNode results and a signal to stop reading by @veewee in #66
  • Drop deprecations by @veewee in #68

Breaking changes

This new version introduces 1 breaking change in the Reader component:

Reader

Instead of providing the results as a string, this string are now wrapped with a MatchingNode.
This allows us to also provide information like the matched NodeSequence and some shortcut functions for converting this XML into a DOM Document or decoded version of the XML.

If you are using the Reader of v2, you will have to change your implementation to support the MatchingNode instead of the string result from previous version.

An example:

use VeeWee\Xml\Dom\Configurator;
use VeeWee\Xml\Reader\Signal;
use function VeeWee\Xml\Reader\Matcher\element_name;
use function VeeWee\Xml\Reader\Matcher\sequence;


$xml = <<<XML
    <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
      <services>
        <service id="service_container" class="Symfony\Component\DependencyInjection\ContainerInterface" public="true" synthetic="true"/>
        <service id="kernel" class="TicketSwap\Kernel" public="true" synthetic="true" autoconfigure="true">
          <tag xmlns="http://symfony.com/schema/dic/tag-1" name="controller.service_arguments">1</tag>
          <tag xmlns="http://symfony.com/schema/dic/tag-2"  name="routing.route_loader">2</tag>
        </service>
      </services>
    </container>
XML;


$reader = VeeWee\Xml\Reader\Reader::fromXmlString($xml);
$signal = new Signal();

foreach ($reader->provide(element_name('tag'), $signal) as $tag) {
    // New result of the reader is now a DTO that contains both the XML and node sequence.
    var_dump(
       // This is the previous matched XML `string`
        $tag->xml(),
        // Contains a match function so that you can run a secondary matcher on the result.
        // Can be handy if you are matching on multiple paths in one read for example.
        $tag->matches(sequence(
                element_name('container'),
                element_name('services'),
                element_name('service'),
                element_name('tag')
        )),
        // You can now directly pull the xml into a DOM Document with or without a DOM configurator.
        $tag->intoDocument(Configurator\canonicalize()),
        // Or decode it directly using xml_decode:
        $tag->decode(Configurator\canonicalize()),
        // You can get access to the current matching NodeSequence data:
        $tag->nodeSequence(),
    );

    // Stops reading on first `tag` match.
    $signal->stop();
}

Removed deprecations:

Following functions were deprecated in v2 and are removed from v3:

  • Reader\Matcher\node_name: Use Reader\Matcher\element_name instead.
  • Reader\Matcher\node_attribute: Use Reader\Matcher\attribute_value instead.

Full Changelog: 2.14.0...3.0.0