Class QRMarkupXML
: eXtensible Markup Language (XML) output
See: XML example
Set the options:
$options = new QROptions;
$options->outputInterface = QRMarkupXML::class;
$options->outputBase64 = false;
// if set to false, the light modules won't be included in the output
$options->drawLightModules = false;
// assign an XSLT stylesheet
$options->xmlStylesheet = './qrcode.style.xsl';
$options->moduleValues = [
QRMatrix::M_FINDER_DARK => '#A71111', // dark (true)
QRMatrix::M_FINDER_DOT => '#A71111', // finder dot, dark (true)
QRMatrix::M_FINDER => '#FFBFBF', // light (false)
QRMatrix::M_ALIGNMENT_DARK => '#A70364',
QRMatrix::M_ALIGNMENT => '#FFC9C9',
QRMatrix::M_VERSION_DARK => '#650098',
QRMatrix::M_VERSION => '#E0B8FF',
];
The XSLT stylesheet qrcode.style.xsl
:
<?xml version="1.0" encoding="UTF-8"?>
<!-- XSLT style for the XML output example -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<!-- SVG header -->
<svg xmlns="http://www.w3.org/2000/svg"
version="1.0"
viewBox="0 0 {qrcode/matrix/@width} {qrcode/matrix/@height}"
preserveAspectRatio="xMidYMid"
>
<!--
path for a single module
we could define a path for each layer and use the @layer attribute for selection,
but that would exaggerate this example
-->
<symbol id="module" width="1" height="1">
<circle cx="0.5" cy="0.5" r="0.4" />
</symbol>
<!-- loop over the rows -->
<xsl:for-each select="qrcode/matrix/row">
<!-- set a variable for $y (vertical) -->
<xsl:variable name="y" select="@y"/>
<xsl:for-each select="module">
<!-- set a variable for $x (horizontal) -->
<xsl:variable name="x" select="@x"/>
<!-- draw only dark modules -->
<xsl:if test="@dark='true'">
<!-- position the module and set its fill color -->
<use href="#module" class="{@layer}" x="{$x}" y="{$y}" fill="{@value}"/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
Render the output:
$data = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
$out = (new QRCode($options))->render($data); // -> XML, rendered as SVG
header('Content-type: application/xml');
echo $out;
The associated XML schema can be found over at GitHub: qrcode.schema.xsd
method | return | description |
---|---|---|
(protected) createMatrix() |
DOMElement |
creates the matrix element |
(protected) row(int $y, array $row) |
DOMElement|null |
creates a DOM element for a matrix row |
(protected) module(int $x, int $y, int $M_TYPE) |
DOMElement|null |
creates a DOM element for a single module |
property | type |
---|---|
$drawLightModules |
bool |
$outputBase64 |
bool |
xmlStylesheet |
string |