-
Notifications
You must be signed in to change notification settings - Fork 1
/
xml_normalize.php
41 lines (32 loc) · 1.13 KB
/
xml_normalize.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
/**
* Converte STDIN ou URI em XML normalizado, padrão C14N, para fins de preservação digital e checksum.
* Exemplos de uso com terminal na raiz do projeto:
* php src/xml_normalize.php < autoridade.rdf.xml | more
* php src/xml_normalize.php http://www.lexml.gov.br/vocabulario/autoridade.rdf.xml > data/RDF-v1/autoridade.rdf.xml
*/
// IO
if ($argc<2) $url = 'php://stdin';
else $url = $argv[1];
if (!$url) die("\nERRO: sem input definido\n");
// Process:
$dom = new DOMDocument;
$dom->load($url);
print cleanXML($dom);
// // // // // //
// // // LIB
/**
* Converte DOMDocument livre em DOMDocument normalizado, limpando espaços e ordenando atributos.
* @param $dom DOMDocument
* @output string com XML "limpo".
*/
function cleanXML($dom) {
$dom->normalizeDocument(); // secondary DOM normalization
$xC14N = $dom->documentElement->C14N(); // main, normalize attribute order, etc.
$dom2 = new DOMDocument;
$dom2->preserveWhiteSpace = false; // before load
$dom2->formatOutput = true; // any
$dom2->loadXML($xC14N);
$dom2->encoding = 'UTF-8'; // after load
return $dom2->saveXML(); // documentElement
}