DOM4J Introdução
Endereço do projeto DOM4J: http://sourceforge.net/projects/dom4j/?source=directory
DOM4J é uma biblioteca de código aberto simples para lidar com XML, XPath e XSLT.
O DOM4J usa o DOM4J depois de baixar o projeto DOM4J, descompacte-o e adicione seu pacote JAR (minha versão atual é chamada Dom4j-1.6.1.jar) ao caminho da classe.
(Propriedades-> Java Build Path-> Adicionar frascos externos ...).
Em seguida, você pode usar a API que ela fornece para programação.
Exemplo de programa 1
O primeiro programa usa o código Java para gerar um documento XML, e o código é o seguinte:
pacote com.example.xml.dom4j; importar java.io.fileOutputStream; importar java.io.fileWriter; importar org.dom4j.document; importar org.dom4j.documentHel por; importar org.dom4j.Element; importar org.dom4j. io .OutputFormat; importar org.dom4j.io.xmlwriter;/** * DOM4J Framework Aprende a usar a estrutura DOM4J para criar um documento e saída XML e salvar * */public class Dom4jtest1 {public static void main (strin g [] args) lança exceção {// o primeiro método: crie um documento e crie um elemento raiz // Crie um documento: use um documento de classe auxiliar = documenthelper.createLedocument (); ROOT = DocumentHelper.CreateElement ("ST UDENT"); Document2 = DocumentHelp Er.createCument (root2); Elemento WorldElement = ROOT2.Add (World "); .Writ E (documento); "Stud ent.xml"), formato); FileWriter ("Student2.xml"), formato);
Saída do console do programa:
<? xml versão = "1.0" coding = "utf-8"?> <estudante/>
Um documento XML gerado:
<? xml versão = "1.0" coding = "utf-8"?> <name do aluno = "zhangsan"> <le> hello text </hello> <lorde> text mundial
Exemplo de programa 2
Exemplo de programa 2, leia o documento XML e analise -o e produza seu conteúdo.
Primeiro, os documentos a serem analisados são os seguintes:
<? xml versão = "1.0" coding = "utf-8"?> <name dos alunos = "zhangsan"> <hello name = "lisi"> hello text1 </hello <hello name = "lisi2"> hello text2 < : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : ::::::::::::::::::::::::::hee ::::::: /hello> <hello name = "lisi3"> olá text3 < /hello> <name do mundo = "wangwu "> World Text1 </morld> <World Name =" Wangwu2 "> World Text2 </morld> <orld> mundial te xt3 </mundial> </toldes> pacote com.example.xml.dom4j; importar java.io. Arquivo; importar java.util.iterator; importar java.util.list; importar javax.xml.parsers .documentBuilder; importar javax. .dom4j.io.domReader; importar org.dom4j.io.saxread er;/** * dom4j Aprendizagem da estrutura: leitura e análise xml * * */public class Dom4jtest2 {public static void main (string [] args) lança exceção { SaxReader saxReader = new SaxReader (); " + root.getName ()); // Obtenha todos os elementos da criança <lement> ChildList = root.Elements (); System. out.println (" Total Child Count: " + ChildList.size ()); // Get o elemento filho de uma lista de nomes específicos <lement> ChildList2 = Root.Elements ("Hello"); o elemento de nome especificado FirstWorldElement = root.Element ("World"); atributoValue ("Nome")); Iterador iter = root.Elementiter (); println ("Use DomReader --------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- ---------------------- DocumentBuilderFactory DBF = DocumentBuilderFactory.NewInstance (); w3c.dom.document deve ser usado Elemento rootElement = document.get rootElement ();
Após a execução do código, a saída é:
Raiz: StudentStotal Child Count: 6Hello Child: 3 Primeira Mundial Att: Nome = Saída Iterativa Wangwu ---------------------------------- -------------------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- -------------------------------------- Ader ------ ------ ------------------ raiz: alunos
Sax analisa xml
A seguir, são apresentadas as etapas para implementar a análise de entidade no sax
// a seguir é um XMLReader para analisar (i) Etapa 1: Crie uma nova classe de fábrica SaxParserFactory, o código é o seguinte:
SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE ();
(2) Etapa 2: Deixe a classe de fábrica gerar um saxparser da classe Sax, o código é o seguinte:
SAXPARSER analiser = Factory.NewsAxParser ();
(Iii) Etapa 3: Obtenha uma instância do XMLReader do saxpsrser, o código é o seguinte:
XmlReader leitor = parser.getxmlReader ();
(4) Etapa 4: Registre o manipulador que você escreveu no XMLReader.
leitor.setContentHandler (isto);
(V) Etapa 5: Depois de transformar um documento ou recurso XML em um fluxo de entrada de entrada que o Java pode processar, a análise começa oficialmente e o código é o seguinte:
leitor.parse (novo inputSource (IS));
// O seguinte é usar o SaxParser para analisar (i) a primeira etapa: Crie uma nova classe de fábrica SaxParserFactory, o código é o seguinte:
SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE ();
(2) Etapa 2: Deixe a classe de fábrica gerar um saxparser da classe Sax, o código é o seguinte:
SAXPARSER analiser = Factory.NewsAxParser ();
(3) Etapa 3: Depois de transformar um documento ou recurso XML em um fluxo de entrada de entrada que o Java pode processar, a análise começa oficialmente e o código é o seguinte:
parser.parse (é, isso);
Eu acho que todo mundo viu o ContentHandler.
// Defina um objeto de localizador que pode localizar o local onde ocorre o evento de conteúdo do documento
public void setDocumentLocator (localizador de localizador)
// usado para lidar com o evento de início de análise de documentos
public void startDocument () lança saxException
// Procede o evento de início do elemento e você pode obter o URI, o nome do elemento, a tabela de classe de atributo e outras informações do espaço para nome em que o elemento está localizado nos parâmetros.
public void startElement (string namespacesuri, string localName, string qname, atributos atts) lança saxException
// Manuseie o evento final do elemento e você pode obter o URI, o nome do elemento e outras informações do espaço para nome em que o elemento está localizado nos parâmetros.
Public void endElement (String Namespacesuri, String LocalName, String qname) lança saxException
// processa o conteúdo do caractere do elemento e você pode obter o conteúdo dos parâmetros
Personagens públicos vazios (char [] ch, int start, int length) lança saxException
A propósito, vamos apresentar os métodos no XMLReader.
// Registre e lidera e manuseie o evento de análise de documentos XML ContentHandler
public void SetContentHandler (conteúdo -manipulador)
// Comece a analisar um documento XML
Public Void Parse (entrada de entrada) lança saxException
Eu terminei de falar.
pacote com.example.demo; ) {return _id; () {return _age;
Em seguida, queremos implementar um conteúdo para analisar xml
A implementação de um conteúdo de Mandinador geralmente requer as seguintes etapas
1. Defaulthandler é uma classe base, que simplesmente implementa um conteúdo de mão -de -obra. Só precisamos reescrever o método dentro.
2. Reescrever StartDocument () e EndDocument ().
3. Reescreva o startElement (). Freqüentemente, alguns dados são operados nesta função, julgando o valor do nome local.
4. Reescreva o método dos caracteres (), que é um método de retorno de chamada. Depois que o analisador executar o startElement (), esse método será executado após a análise do conteúdo do nó e o parâmetro ch [] é o conteúdo do nó.
5 Reescrever o método ENDELEMENT (). O DefaultHandler e Re-Rre escrevem os seguintes métodos
classe pública sax_parserxml estende a DefaultHandler { / *** Este evento será acionado ao analisar a declaração do arquivo XML. Método Stub Super.StartDocument (); {// TODO Método Gerado AUSTRUIMENTO SUPER.STARTELEMENT (URI, LocalName, QNAME, atributos); ] ch, int start, int length) lança saxException {// TODO Method Auto-Gerated Stub Super.Characters (CH, Start, Length); @Override public void endElement (String URI, String LocalName, String qname) lança saxException {// TODO Method Auto-Gerated Stub Super.endElement T (URI, LocalName, QNAME);
Primeiro, criamos uma lista para salvar os dados da pessoa analisada
LISTA <PERS> PESSOAS;
mas? Onde inicializar? Podemos inicializá -lo no startDocument (), porque este evento será acionado ao analisar a declaração do arquivo XML, por isso é mais apropriado colocá -lo aqui
/ *** Este evento será acionado ao analisar a declaração do arquivo XML. );
Em seguida, começaremos a analisar
/ *** Este evento será acionado ao analisar a etiqueta inicial de um elemento**/ @Override public void startElement (String Uri, String LocalName, String qname, Atributos Atributos) lança saxException {// TODO Método Auto-Generated Stub .StartElement (URI, LocalName, QNAME, atributos); atributas.getValue ("id"));
No código acima, o nome local representa o nome do elemento atualmente analisado
// Etapa // 1. ** * Este evento é acionado ao ler um elemento de texto. , start, comprimento); Equals ("Nome")) {// Adicione o valor recuperado ao objeto Pessoa Person.set_name (txt);
Em seguida é o que você precisa fazer quando a tag terminar
/ *** Este evento será acionado quando a etiqueta final for lida**/ @Override public void endElement (String Uri, String LocalName, String qname) lança saxException {// TODO Auto-Gen Eromped Method Stub Super.endElement (URI , LocalName, QNAME); : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the :::::::::::: "";
A análise provavelmente é o processo
1. O método de startElement será chamado no início de um elemento.
2.O método dos caracteres será chamado a seguir, que pode ser usado para obter o valor do elemento.
3. Quando um elemento termina, o método do endurecimento será chamado após a conclusão da análise.
Lista pública <SONE> Readxml (InputStream) {SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE (); Segundo método xmlreader leitor = parser.getxmlReaded (); devolver pessoas;
O código acima não explica.
pacote com.example.demo.utils; .xml.sax.attributes; Demonstração. SAXPARSER Parser = Factory.NewsAxparser (); (Novo InputSource (IS); Você pode fazer algum trabalho de inicialização** / @Override public void startDocument () lança saxException {// TODO Método Auto-Generado Stub Super.StartDocument (); * * Este evento será acionado ao analisar a tag de inicialização de um elemento * */ @Override public void startElement (String Uri, String LocalName, String QName, Atributos Atributos) lança SA Xexception {// TODO Método Auto-Gerado Super. StartElement (URI, LocalName, QNAME, atributos); .getValue ("ID"); joga o episódio Saxexc {// TODO Method Auto-Gerated Stub Super.Characters (CH, Start, Length); Iniciar, comprimento); "Age") {Pessoa. joga o episódio Saxexc {// TODO Método gerado automaticamente Stub Super.endElement (URI, LocalName, QNAME); Pessoa! = NULL) {p ersons.add (pessoa);
Escreva um método para chamar esta aula
Lista <SONE> PESSONS = NOVO SAX_PARSERXML (). Readxml (IS); ); .get_age () + "/n");
Se você vir a seguinte descrição da interface, a análise foi bem -sucedida ~
resumo:
DOM (modelo de objeto de arquivo) Analisagem: O analisador lê o documento inteiro e cria uma estrutura de árvore residente em memória e o código pode operar essa estrutura de árvore de acordo com a interface DOM.
Vantagens: o documento inteiro é lido na memória, conveniente para operar: suporta várias funções, como modificação, exclusão e reprodução e arranjo.
Desvantagens: Leia o documento inteiro na memória, mantendo muitos nós desnecessários, desperdiçando memória e espaço.
Use ocasiões: Depois que o documento é lido, o documento precisa ser operado várias vezes e quando os recursos de hardware são suficientes (Memory, CPU).
Para resolver os problemas existentes em Dom Parsing, ocorre a análise sax. Suas características são:
Vantagens: não há necessidade de implementar o documento inteiro, que leva menos recursos. Especialmente em ambientes incorporados, como o Android, é altamente recomendável usar análise de sax.
Desvantagens: Ao contrário da análise DOM, os dados não são persistentes. Se os dados não forem salvos após o evento, os dados serão perdidos.
Use ocasião: a máquina tem limitações de desempenho