kb.erickguedes.com
XML: Estrutura e Processamento

Fundamentos da Sintaxe XML

Aula 1 de 5

Estrutura de um Documento XML

XML (eXtensible Markup Language) é um formato de texto para representação de dados estruturados. Todo documento XML deve ter uma estrutura hierárquica com um único elemento raiz.

<?xml version="1.0" encoding="UTF-8"?>
<livro>
  <titulo id="123">Aprendendo XML</titulo>
  <autor>João Silva</autor>
  <ano>2024</ano>
</livro>

Elementos e Atributos

Elementos são os blocos fundamentais do XML. Atributos fornecem metadados sobre elementos.

<!-- Elemento vazio sem atributos -->
<br></br>
<br/>  <!-- forma abreviada -->

<!-- Elemento com múltiplos atributos -->
<produto codigo="P001" categoria="software" ativo="true">
  <nome>Editor XML Pro</nome>
  <preco moeda="BRL">299.90</preco>
</produto>

Comentários e CDATA

Comentários são ignorados pelo parser. CDATA preserva texto literal sem parsing.

<!-- Isto é um comentário -->
<descricao>
  Texto normal com &amp; &lt; &gt;
</descricao>

<![CDATA[
  Texto literal: a < b & c > d
  Pode conter qualquer caractere sem escapes
]]>

Well-Formed vs Valid

Um documento well-formed segue as regras básicas de sintaxe XML. Um documento valid obedece a uma DTD ou XSD.

<!-- well-formed: sintaxe correta -->
<nota>
  <para>Maria</para>
  <de>João</de>
</nota>

<!-- well-formed mas inválido se o schema exigir elemento <data> -->
<nota>
  <para>Maria</para>
</nota>

Encoding e Declaration

A declaração XML deve estar na primeira linha. O encoding define a codificação do documento.

# Verificar encoding de um arquivo XML
file -i documento.xml
# Resultado: documento.xml: text/xml; charset=utf-8

# Converter encoding com iconv
iconv -f ISO-8859-1 -t UTF-8 input.xml > output.xml

Lab: Criando Documentos XML

Crie um documento XML para um catálogo de produtos.

# 1. Criar arquivo catalogo.xml
cat << 'EOF' > catalogo.xml
<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
  <produto id="101">
    <nome>Notebook Pro</nome>
    <preco moeda="BRL">4999.00</preco>
    <categoria>Eletrônicos</categoria>
    <estoque>15</estoque>
  </produto>
  <produto id="102">
    <nome>Mouse Wireless</nome>
    <preco moeda="BRL">129.90</preco>
    <categoria>Periféricos</categoria>
    <estoque>42</estoque>
  </produto>
</catalogo>
EOF

# 2. Validar well-formed com xmllint
xmllint --noout catalogo.xml

# 3. Extrair valores com xmllint --xpath
xmllint --xpath "//produto[nome='Notebook Pro']/preco/text()" catalogo.xml

XML bem-formado é requisito mínimo; XML válido é requisito de qualidade.