Como recuperar o valor do elemento de XML usando Java?

Eu sou novo em XML. Eu quero ler o seguinte XML com base no nome do pedido. Por favor me ajude a ler o XML abaixo em Java –

   emailrequest emailresponse   Cleanrequest Cleanresponse   

Se o seu XML é uma String, então você pode fazer o seguinte:

 String xml = ""; //Populated XML String.... DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(xml))); Element rootElement = document.getDocumentElement(); 

Se o seu XML estiver em um arquivo, o Document document será instanciado assim:

 Document document = builder.parse(new File("file.xml")); 

O document.getDocumentElement() retorna o nó que é o elemento do documento (no seu caso ).

Depois de ter um rootElement , você pode acessar o atributo do elemento (chamando o método rootElement.getAttribute() ), etc. Para mais methods no org.w3c.dom.Element do java

Mais informações sobre java DocumentBuilder & DocumentBuilderFactory . Lembre-se de que o exemplo fornecido cria uma tree XML DOM, portanto, se você tiver grandes dados XML, a tree poderá ser enorme.

  • Questão relacionada .

Update Aqui está um exemplo para obter o “valor” do elemento

 protected String getString(String tagName, Element element) { NodeList list = element.getElementsByTagName(tagName); if (list != null && list.getLength() > 0) { NodeList subList = list.item(0).getChildNodes(); if (subList != null && subList.getLength() > 0) { return subList.item(0).getNodeValue(); } } return null; } 

Você pode efetivamente chamá-lo como,

 String requestQueueName = getString("requestqueue", element); 

Se você está apenas olhando para obter um único valor do XML, você pode querer usar a biblioteca XPath do Java. Por exemplo, veja minha resposta a uma pergunta anterior:

  • Como usar XPath em documentos xml com espaço para nome padrão

Seria algo parecido com:

 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("E:/test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); Node node = (Node) xPath.evaluate("/Request/@name", dDoc, XPathConstants.NODE); System.out.println(node.getNodeValue()); } catch (Exception e) { e.printStackTrace(); } } } 

Caso você precise apenas de um (primeiro) valor para recuperar do xml:

 public static String getTagValue(String xml, String tagName){ return xml.split("<"+tagName+">")[1].split("")[0]; } 

Caso você queira analisar todo o documento xml use o JSoup:

 Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); for (Element e : doc.select("Request")) { System.out.println(e); } 

Existem várias maneiras diferentes de fazer isso. Você pode querer verificar XStream ou JAXB . Existem tutoriais e os exemplos.

Existem duas maneiras gerais de fazer isso. Você irá criar um Modelo de Objeto de Domínio desse arquivo XML, dê uma olhada neste

e a segunda opção é usar a análise orientada a events, que é uma alternativa à representação xml do DOM. Você pode encontrar a melhor comparação geral dessas duas técnicas básicas aqui . É claro que há muito mais para saber sobre o processamento de xml, por exemplo, se você receber a definição de esquema XML (XSD), poderá usar o JAXB .

Existem várias APIs disponíveis para ler / gravar arquivos XML por meio do Java. Eu me referiria usando o StaX

Isso também pode ser útil – Java XML APIs

Você pode criar uma class que estenda org.xml.sax.helpers.DefaultHandler e chame

 start_(Attributes attrs); 

e

 end_(); 

Para isso é:

 start_request_queue(attrs); 

etc.

E, em seguida, estende essa class e implementa os analisadores de arquivos de configuração xml desejados. Exemplo:

   ...
   public void startElement (String uri, nome da string, qname da string,
                            org.xml.sax.Attributes attrs) 
                   lança org.xml.sax.SAXException {
     Classe [] args = nova Classe [2];
     args [0] = uri.getClass ();
     args [1] = org.xml.sax.Attributes.class;
     experimentar {
       String mname = name.replace ("-", " "); 
        java.lang.reflect.Method m =  
              getClass (). getDeclaredMethod ("start " + mname, args);
       m.invoke (this, new Object [] {uri, (org.xml.sax.Attributes) attrs}); 
     } 
catch (IllegalAccessException e) { throw new RuntimeException (e); }
catch (NoSuchMethodException e) { throw new RuntimeException (e); }
catch (java.lang.reflect.InvocationTargetException e) { org.xml.sax.SAXException se = new org.xml.sax.SAXException (e.getTargetException ()); se.setStackTrace (e.getTargetException (). getStackTrace ()); }

e em um analisador de configuração específico:

    public void start_Request (sequência de caracteres uri, org.xml.sax.Attributes attrs) {
      // certifique-se de ler os atributos corretamente
      System.err.println ("Request, name =" + attrs.getValue (0);
    }

Como você está usando isso para configuração, sua melhor aposta é a configuração do commons do apache. Para arquivos simples, é muito mais fácil de usar do que analisadores XML “brutos”.

Veja o XML how-to