Como trabalhar com processamento XML em C++
Aspose.Cells FOSS for C++ includes a lightweight XML processing layer used internally for reading and writing Open XML parts. The XmlDocument, XmlElement, e XmlAttribute classes fornecem acesso programático a dados XML. Este guia abrange o carregamento de XML, atravessando elementos e serializando documentos.
Guia passo a passo
Passo 1: Prepare a construção
cmake_minimum_required(VERSION 3.15)
project(XmlProcessing CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(XmlProcessing main.cpp)
target_link_libraries(XmlProcessing PRIVATE Aspose.Cells.Foss.Cpp)Passo 2: Inclua cabeçalhos
#include "aspose/cells_foss/XmlDocument.h"
#include "aspose/cells_foss/XmlElement.h"
#include "aspose/cells_foss/XmlAttribute.h"
using namespace Aspose::Cells_FOSS;Passo 3: Carregar um documento XML
Utilização: XmlDocument::Load para analisar uma cadeia XML na árvore de documentos em memória:
int main() {
XmlDocument doc;
doc.Load("<root><item key=\"a\">Hello</item><item key=\"b\">World</item></root>");
return 0;
}Passo 4: Verificar elementos nulos
XmlElement usa um modelo baseado em manopla um elemento retornado de uma rota faltante é nulo. Sempre verifique IsNull() antes de aceder aos dados:
XmlElement root = doc.GetRootElement();
if (!root.IsNull()) {
std::string val = root.GetValue();
}Passo 5: Atributos transversais
Utilização: XmlElement::GetAttributes() Cada atributo de manipulação expõe o seu nome e valor:
auto attrs = root.GetAttributes();
for (auto& attr : attrs) {
bool isNull = attr.IsNull();
}Passo 6: Serialização para UTF-8 String
Utilização: XmlDocument::SaveToUtf8() para obter o XML serializado:
std::string xml = doc.SaveToUtf8();Passo 7: Lidar com erros de análise
Embalagem XmlDocument::Load num bloco de tentativa/captura ao processar XML não confiável:
try {
doc.Load(xmlContent);
} catch (const XmlParsingException& ex) {
// Handle malformed XML
}Problemas comuns e soluções
IsNull() retorna a verdade inesperadamente. O caminho do elemento não existe no documento. Verifique se a estrutura XML corresponde ao esquema esperado antes de atravessar o documento .
XmlParsingException em carga A entrada está malformada ou contém entidades não suportadas. Valide o XML com uma ferramenta externa antes de passá-lo para a Load.
SaveToUtf8() retorna saída inesperada A estrutura do documento foi modificada após a publicação de um relatório sobre o processo. Load.Verificar todos os intermediários . Build operações correctamente concluídas.
Atributos não encontrados A pesquisa de atributos é sensível a maiúsculas. Verifique se o nome do atributo corresponde exatamente como aparece na fonte XML.
Resultado vazio de: GetValue() Os nós de texto que contêm apenas espaço branco podem retornar uma cadeia vazia. Verifique o XML bruto para confirmar se o elemento tem conteúdo não-espaço branco.
Perguntas Frequentes
A camada XML destina-se apenas a aplicações ou utilizações internas?
A Comissão XmlDocument, XmlElement, e XmlAttribute As classes do mapping são parte da API pública e podem ser usadas diretamente.WorkbookXmlMapper, WorksheetXmlMapper, etc.) são auxiliares internos chamados por: XlsxWorkbookSerializer e não são destinados a utilização directa.
Posso criar um novo documento XML a partir do zero?
Sim, usa. XmlDocument::Build para construir um documento programaticamente, em seguida, usar XmlElement e a) XmlAttribute::MakeAttribute para adicionar nós.
- Sim . XmlDocument Suporte para consultas XPath?
Não. A implementação atual fornece apenas a travessa de manobras de elementos; XPath não é suportado.
O que a codificação faz? SaveToUtf8() Produzir?
A saída é sempre XML codificado em UTF-8.<?xml version="1.0" encoding="UTF-8"?>) está incluído na produção.
Posso usar o meu telefone? XmlDocument Para ler partes de arquivo XLSX?
As partes de arquivo XLSX são gerenciadas internamente por: XlsxWorkbookSerializer. Não há API pública para extrair partes de arquivo cru. Use Workbook para todas as operações de carga/salvamento XLSX.