for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/**
* Created by PhpStorm.
* User: Administrador
* Date: 04/10/2017
* Time: 04:41 PM.
*/
namespace Greenter\Report;
* Class XmlUtils.
final class XmlUtils
{
const EXT_NAMESPACE = 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2';
const DS_NAMESPACE = 'http://www.w3.org/2000/09/xmldsig#';
* @param string $xml
*
* @return string
public function getHashSign($xml)
$doc = new \DOMDocument();
$doc->loadXML($xml);
return $this->getHashSignFromDoc($doc);
}
* @param string $filename
public function getHashSignFromFile($filename)
$doc->load($filename);
* @param \DOMDocument $document
public function getHashSignFromDoc(\DOMDocument $document)
$xpt = $this->getXpath($document);
$exts = $xpt->query('ext:UBLExtensions/ext:UBLExtension', $document->documentElement);
if ($exts->length == 0) {
return '';
$nodeSign = $exts->item($exts->length - 1);
$hash = $xpt->query('ext:ExtensionContent/ds:Signature/ds:SignedInfo/ds:Reference/ds:DigestValue', $nodeSign);
if ($hash->length == 0) {
return $hash->item(0)->nodeValue;
* @return \DOMXPath
public function getXpath(\DOMDocument $document)
$xpt = new \DOMXPath($document);
$xpt->registerNamespace('ext', self::EXT_NAMESPACE);
$xpt->registerNamespace('ds', self::DS_NAMESPACE);
return $xpt;