Propaganda
Você gostaria de aprender a ler e escrever um arquivo XML de java?
Arquivos XML O que é um arquivo XML e como você pode abri-lo e usá-lo?Você pode ter visto o termo "XML". Você pode até ter aberto acidentalmente um arquivo XML. O que é XML e como você o usa? consulte Mais informação são usados para uma variedade de finalidades, incluindo armazenamento de dados. Antes de JSON se tornar popular, XML era o formato preferido para representar, armazenar e transportar dados estruturados. Embora a popularidade do XML tenha diminuído nos últimos anos, você pode encontrá-lo ocasionalmente, por isso é importante aprender como trabalhar com ele a partir do código.
Java Standard Edition (SE) 10 conceitos básicos de Java que você deve aprender ao começarEsteja você escrevendo uma GUI, desenvolvendo software do lado do servidor ou um aplicativo móvel usando Android, aprender Java será muito útil. Aqui estão alguns conceitos básicos do Java para ajudá-lo a começar. consulte Mais informação
inclui o API Java para processamento XML (JAXP), que é um termo abrangente que cobre a maioria dos aspectos do processamento XML. Esses incluem:- DOM: O Document Object Model inclui classes para trabalhar com artefatos XML, como elemento, nó, atributos, etc. A API DOM carrega o documento XML completo na memória para processamento, portanto, não é muito adequada para trabalhar com arquivos XML grandes.
- SAXOFONE: A API Simples para XML é um algoritmo orientado a eventos para leitura de XML. Aqui, o XML é processado disparando eventos encontrados ao ler XML. Os requisitos de memória para usar este método são baixos, mas trabalhar com a API é mais complexo do que trabalhar com o DOM.
- StAX: A Streaming API for XML é uma adição recente às APIs XML e fornece filtragem de fluxo de alto desempenho, processamento e modificação de XML. Embora evite carregar todo o documento XML na memória, ele fornece uma arquitetura do tipo pull em vez do que uma arquitetura orientada a eventos, portanto, o aplicativo é mais fácil de codificar e entender do que usar o SAX API.
Neste artigo, usamos o API DOM para demonstrar como ler e gravar arquivos XML de java. Cobriremos as outras duas APIs em artigos futuros.
Um arquivo XML de amostra
Para o propósito deste artigo, demonstramos os conceitos usando o seguinte exemplo de XML, que pode ser encontrado aqui:
1.0?>Gambardella, Matthew Guia do desenvolvedor XML
Computador 44.95 2000-10-01 Uma análise aprofundada da criação de aplicativos com XML. Ralls, Kim ...
Lendo um arquivo XML
Vejamos as etapas básicas necessárias para ler um arquivo XML usando a API DOM.
A primeira etapa é obter uma instância de DocumentBuilder. O construtor é usado para analisar documentos XML. Para uso básico, fazemos assim:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (false); factory.setValidating (false); Construtor DocumentBuilder = factory.newDocumentBuilder ();
Agora podemos carregar todo o documento na memória, começando pelo elemento raiz XML. Em nosso exemplo, é o Catálogo elemento.
Arquivo arquivo =...; // Arquivo XML para ler. Documento document = builder.parse (arquivo); Catálogo de elementos = document.getDocumentElement ();
E é isso, pessoal! A API DOM para ler um XML é realmente simples. Agora você tem acesso a todo o documento XML a partir de seu elemento raiz, Catálogo. Vamos agora ver como trabalhar com isso.
Usando a API DOM
Agora que temos a raiz XML Elemento, podemos usar a API DOM para extrair informações interessantes.
Pegue todos os livro filhos do elemento raiz e faça um loop sobre eles. Observe que getChildNodes () retorna tudo crianças, incluindo texto, comentários, etc. Para nosso propósito, precisamos apenas dos elementos filhos, portanto, pulamos os outros.
NodeList books = catalog.getChildNodes (); para (int i = 0, ii = 0, n = books.getLength (); i
Como você encontra um elemento filho específico, dado o pai? O método estático a seguir retorna o primeiro elemento correspondente, se encontrado, ou nulo. Como você pode ver, o procedimento envolve obter a lista de nós filhos e percorrê-los, escolhendo nós de elemento com o nome especificado.
static private Node findFirstNamedElement (Node pai, String tagName) {NodeList filhos = parent.getChildNodes (); para (int i = 0, in = children.getLength (); i
Observe que a API DOM trata o conteúdo de texto em um elemento como um nó separado do tipo TEXT_NODE. Além disso, o conteúdo do texto pode ser dividido em vários nós de texto adjacentes. Portanto, o seguinte processamento especial é necessário para buscar o conteúdo de texto dentro de um elemento.
static private String getCharacterData (nó pai) {StringBuilder text = new StringBuilder (); if (parent == null) return text.toString (); NodeList children = parent.getChildNodes (); para (int k = 0, kn = children.getLength (); k
Munidos dessas funções de conveniência, vamos agora examinar alguns códigos para listar algumas informações de nosso XML de amostra. Gostaríamos de mostrar informações detalhadas para cada livro, como estariam disponíveis em um catálogo de livros.
NodeList books = catalog.getChildNodes (); para (int i = 0, ii = 0, n = books.getLength (); i
Gravando saída XML
Java fornece o API XML Tranform para transformar dados XML. Usamos esta API com o transformação de identidade para gerar saída.
Como exemplo, vamos adicionar um novo livro elemento ao catálogo de amostra apresentado acima. Os detalhes do livro (como autor, título, etc) podem ser obtidos externamente, talvez de um arquivo de propriedades ou de um banco de dados. Usamos o seguinte arquivo de propriedades para carregar os dados.
id = bk113. autor = Jane Austen. título = Orgulho e Preconceito. gênero = Romance. preço = 6,99. publicar_data = 01-04-2010. description = "É uma verdade universalmente reconhecida que um homem solteiro com uma boa fortuna deve estar precisando de uma esposa." Então começa o Orgulho e Preconceito, a espirituosa comédia de maneiras de Jane Austen - um dos romances mais populares de todos os tempos - que apresenta uma luta esplendidamente civilizada entre o orgulhoso Sr. Darcy e a preconceituosa Elizabeth Bennet enquanto encenam seu animado namoro em uma série de salões do século XVIII intrigas.
A primeira etapa é analisar o arquivo XML existente usando o método apresentado acima. O código também é mostrado abaixo.
Arquivo arquivo =...; // Arquivo XML para ler. Documento document = builder.parse (arquivo); Catálogo de elementos = document.getDocumentElement ();
Carregamos os dados do arquivo de propriedades usando o Propriedades classe fornecida com java. O código é bastante simples e mostrado abaixo.
String propsFile =...; Propriedades adereços = novo Propriedades (); try (FileReader em = novo FileReader (propsFile)) {props.load (em); }
Depois que as propriedades são carregadas, recuperamos os valores que queremos adicionar do arquivo de propriedades.
String id = props.getProperty ("id"); String autor = props.getProperty ("autor"); String title = props.getProperty ("title"); String gênero = props.getProperty ("gênero"); String price = props.getProperty ("price"); String publish_date = props.getProperty ("publish_date"); String descr = props.getProperty ("descrição");
Vamos agora criar um vazio livro elemento.
Elemento livro = document.createElement ("livro"); book.setAttribute ("id", id);
Adicionando os elementos filhos ao livro é trivial. Por conveniência, coletamos os nomes dos elementos necessários em um Lista e adicione os valores em um loop.
Listaelnames = Arrays.asList ("autor", "título", "gênero", "preço", "data_de_publicação", "descrição"); for (String elname: elnames) {Elemento el = document.createElement (elname); Texto text = document.createTextNode (props.getProperty (elname)); el.appendChild (texto); book.appendChild (el); } catalog.appendChild (livro);
E é assim que se faz. o Catálogo elemento agora tem o novo livro elemento adicionado. Tudo o que resta agora é escrever o XML atualizado.
Para escrever o XML, precisamos de uma instância de Transformador que é criado conforme mostrado abaixo. Observe que solicitamos recuo do XML de saída usando o setOutputProperty () método.
TransformerFactory tfact = TransformerFactory.newInstance (); Transformador tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys. RECUO, "sim"); tform.setOutputProperty ("{ http://xml.apache.org/xslt}indent-amount", "3");
A etapa final na geração da saída XML é aplicar a transformação. O resultado aparece no fluxo de saída, System.out.
tform.transform (novo DOMSource (documento), novo StreamResult (System.out));
Para gravar a saída diretamente em um arquivo, use o seguinte.
tform.transform (new DOMSource (document), new StreamResult (new File ("output.xml")));
E isso conclui este artigo sobre leitura e gravação de arquivos XML usando a API DOM.
Você usou a API DOM em seus aplicativos? Como foi o desempenho? Por favor, deixe-nos saber nos comentários abaixo.