DOM with Arrays
Learn how to create a new Inphinit project.
DOM to Array
É possivel converter arquivos XML, HTML ou até strings com tal conteudo para um Array complexo ou até um Array simples, dependendo da sua necessidade, exemplo:
use Inphinit\Dom\Document;
$handle = new Document(Document::XML);
$handle->load('<root xmlns:book="https://book-io"><node foo="bar" baz="foobar">contents</node><book:tag>baz</book:tag></root>');
echo "COMPLETE:\n";
print_r($handle->toArray(Document::ARRAY_COMPLETE));
echo "SIMPLE:\n";
print_r($handle->toArray(Document::ARRAY_SIMPLE));
echo "MINIMAL:\n";
print_r($handle->toArray(Document::ARRAY_MINIMAL));
O resultado com ARRAY_COMPLETE irá gerar um Array complexo, mas que pode ser útil, que irá incluir os atributos e valores de tags com namespace:
print_r($handle->toArray(Document::ARRAY_COMPLETE));
output:
Array
(
[root] => Array
(
[node] => Array
(
[@attributes] => Array
(
[foo] => bar
[baz] => foobar
)
[@contents] => contents
)
[book:tag] => baz
[@attributes] => Array
(
[xmlns:book] => https://book.io
)
)
)
O resultado com ARRAY_SIMPLE irá gerar um Array um pouco menos complexo:
print_r($handle->toArray(Document::ARRAY_SIMPLE));
output:
Array
(
[root] => Array
(
[node] => Array
(
[@attributes] => Array
(
[foo] => bar
[baz] => foobar
)
[@contents] => contents
)
[book:tag] => baz
[@attributes] => Array
(
[xmlns:book] => https://book.io
)
)
)
Enquanto ARRAY_MINIMAL irá retornar um Array bastante simples, contendo apenas valores e chaves de tags sem namespace. Atributos também não serão convertidos:
print_r($handle->toArray(Document::ARRAY_MINIMAL));
output:
Array
(
[root] => Array
(
[node] => contents
)
)
Array to HTML
Uma Array pode se convertida em um HTML ou XML e para definir os arquivos as chaves do array devem ser prefixadas com o @, com exceção do @contents, que servirá para preencher o valor do elemento gerado. Exemplo de HTML:
use Inphinit\Dom\Document;
$handle = new Document(Document::HTML);
$handle->fromArray([
'html' => [
'head' => [
'@contents' => 'contents <title>test</title>',
],
'body' => [
'main' => [
'p' => [
'@contents' => 'contents <s>test</s>',
'span' => [
'foo',
'bar',
'baz'
]
],
'div' => [
'foo',
'bar',
'baz'
],
'@comment' => 'test'
],
'@attributes' => [
'data-foo' => 'bar',
'data-baz' => 'foobar'
]
],
'@attributes' => [
'class' => 'sample',
'id' => 'test'
]
]
]);
$handle->dump($handle->root());
Array to XML
Uma Array pode se convertida XML da mesma forma que no exemplo para HTML. Para definir os arquivos as chaves do array devem ser prefixadas com o @, com exceção do @contents, que servirá para preencher o valor do elemento gerado. Exemplo de HTML:
use Inphinit\Dom\Document;
$handle = new Document(Document::XML);
$handle->fromArray([
'root' => [
'node' => [
'@attributes' => [
'foo' => 'bar',
'baz' => 'foobar'
],
'foo' => [
'bar',
'baz'
],
'@contents' => 'contents <s>test</s>',
],
'book:tag' => 'baz',
'@attributes' => [
'class' => 'sample',
'xmlns:book' => 'https://book.io'
],
'@comment' => 'foobar'
]
]);
$handle->dump($handle->root());