Manipulação de XML com PHP DOM, XSLT, DTD e XSD
Data: 03 de janeiro de 2024
Criação de Ficheiro XML com PHP DOM
Apresente um script PHP DOM que crie um ficheiro XML (com o nome exercicio2.xml) com o conteúdo apresentado na Figura 1.
<?php
// Cria uma nova instância de DOMDocument
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true; // Formata a saída para melhor legibilidade
// Cria o elemento raiz <shiporder>
$shiporder = $dom->createElement('shiporder', '889923');
$dom->appendChild($shiporder);
// Cria e adiciona o elemento <cliente_nome>
$cliente_nome = $dom->createElement('cliente_nome', 'Carlos Alves');
$dom->appendChild($cliente_nome);
// Cria o elemento <dados> e seus filhos
$dados = $dom->createElement('dados');
$name = $dom->createElement('name', 'Carlos Alves');
$dados->appendChild($name);
$address = $dom->createElement('address', 'Rua de cima, nº1');
$dados->appendChild($address);
$city = $dom->createElement('city', '6000-123 Castelo Branco');
$dados->appendChild($city);
$dom->appendChild($dados);
// Função auxiliar para criar e adicionar um item
function adicionarItem($dom, $titulo, $autor, $quantidade, $preco, $note = null) {
$item = $dom->createElement('item');
$title = $dom->createElement('title', $titulo);
$item->appendChild($title);
// Um dos dados tem uma nota, o outro não
if ($note !== null) {
$noteElement = $dom->createElement('note', $note);
$item->appendChild($noteElement);
}
$author = $dom->createElement('autor', $autor);
$item->appendChild($author);
$quantity = $dom->createElement('quant', $quantidade);
$item->appendChild($quantity);
$price = $dom->createElement('price', $preco);
$item->appendChild($price);
return $item;
}
// Adiciona os itens ao documento
$item1 = adicionarItem($dom, 'Nunca Desistas de TI', 'Susana Teixeira', '3', '10.90', 'Special Edition');
$dom->appendChild($item1);
$item2 = adicionarItem($dom, 'Os Maias', 'Eça de Queirós', '1', '9.90');
$dom->appendChild($item2);
// Salva o XML em um ficheiro
$dom->save('exercicio2.xml');
echo "Arquivo 'exercicio2.xml' criado com sucesso.";
?>Análise e Transformação XSLT
Atendendo ao ficheiro XSLT apresentado na Figura 2, diga para que serve e qual será o resultado/output se aplicado ao ficheiro apresentado na Figura 1.
Resposta:
O código XSLT apresentado na Figura 2 tem como objetivo transformar um documento XML (como o da Figura 1) em um formato mais legível e estruturado, neste caso, um documento HTML. Essa transformação é frequentemente usada para apresentar dados XML de forma visual e amigável ao utilizador.
OUTPUT: shiporder: 889923, name: Carlos Alves, address: Rua de cima, nº1, city: 6000-123 Castelo Branco, quantidade: 3
Filtragem com Folha de Estilo XSLT
Escreva um script PHP que carregue o ficheiro XML apresentado na Figura 1 e o ficheiro XSLT apresentado na Figura 2, mas com as alterações necessárias para que apresente todos os produtos com “autor” Susana Teixeira e com “price” superior a 10.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<h2>Produtos do Autor: Susana Teixeira (Preço > 10)</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>shiporder</th>
<th>name</th>
<th>address</th>
<th>city</th>
<th>title</th>
<th>price</th>
</tr>
<xsl:for-each select="shiporder/item[autor='Susana Teixeira' and price > 10]">
<tr>
<td><xsl:value-of select="/shiporder/id"/></td>
<td><xsl:value-of select="/shiporder/dados/name"/></td>
<td><xsl:value-of select="/shiporder/dados/address"/></td>
<td><xsl:value-of select="/shiporder/dados/city"/></td>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="price"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>Modelação de Alunos com DTD e Exemplo XML
Crie um DTD para armazenar os dados dos alunos da ESTCB (tendo um ELEMENT com o nome Aluno_da_ESTCB e com os seguintes ELEMENT: nome, morada [podendo ser constituída por várias moradas, sendo que cada uma tem que conter rua, localidade e código_postal], email, telef, data_nascimento, CC, NIF), devendo permitir um ou mais telefones e emails, e com um atributo nacionalidade (que é um atributo de Aluno_da_ESTCB). Apresente um exemplo do XML correspondente.
Estrutura Lógica com XML Schema (XSD)
Apresente a estrutura lógica (XML Schema) para o exercício anterior. Use, pelo menos, xs:element, xs:attribute required, xs:restriction e order indicator choice.