2016-12-27 4 views
0

xml에서 읽기 위해 Stax XML EventReader를 사용하고 있습니다. 나는 XML을 사용하고있는 몇 개의 태그를 검증해야한다. 나는 성공적으로 XML에서 태그와 문자를 읽을 수 있지만 속성 이름과 값을 읽을 수는 없습니다. 내가 JDK를 사용하고 1.8.111XMLEventReader Stax API가 JDK 1.8의 Attribute에 대한 getName 및 값을 가져올 수 없습니다.

XML :

<xml> 
<status request_id="fa844c52-daeb-4d24-920b-581ce2ac1afe1482232642212"  response_time="00:00:00:039"> 

CODE :

public static String XMLParseAttribute() throws XMLStreamException, IOException { 

    XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
    in = IOUtils.toInputStream(URLResponse, "UTF-8"); 
    eventReader = inputFactory.createXMLEventReader(in);     
    XMLEvent event = eventReader.nextEvent(); 

     while(eventReader.hasNext()) 
     { 
      XMLEvent event = eventReader.nextEvent(); 

       if (event.isStartElement()) { 
        Iterator<Attribute> itr = event.asStartElement().getAttributes(); 
        while(itr.hasNext()){ 
         Attribute attribute = itr.next(); 
         attribute. //get name and value here 
        } 
       } 
      } 
     //Something like this below 
     return attribute.getName().toString(); 
     } 
친절

속성 이름과 값을 읽는이의 XMLEventReader를 사용하는 방법에 나를 안내 .

답변

0

그것은 짧고 빠른 대답은

는 속성 이름이 속성 값 사용을 얻기 위해이

String name = attribute.getName().toString(); 

을 사용하여 얻을 쉬운 형제 인 것이

String value = attribute.getValue(); 

귀하의 방법에 대한 전체 코드 (나는 그 결과를 삭제했습니다. 당신은 또한이 간단한 튜토리얼 모습을 가질 수
: 형) 재 배열 된 코드 여기

public static void XMLParseAttribute() throws XMLStreamException, IOException 
{ 

    XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
    InputStream in = new FileInputStream("input.xml"); 
    XMLEventReader eventReader = inputFactory.createXMLEventReader(in); 
    XMLEvent event; 

    while (eventReader.hasNext()) 
    { 
     event = eventReader.nextEvent(); 

     if (event.isStartElement()) 
     { 
      String elemntName = event.asStartElement().getName().getLocalPart(); 
      System.out.println(elemntName); 
      Iterator<Attribute> iterator = event.asStartElement().getAttributes(); 
      while (iterator.hasNext()) 
      { 
       Attribute attribute = iterator.next(); 
       String value = attribute.getValue(); 
       String name = attribute.getName().toString(); 
       System.out.println("\t" + name + " " + value); 
      } 
     } 
    } 
} 

와이 유용하고 문제를 (해결 완전한 코드를

import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Iterator; 
import javax.xml.stream.*; 
import javax.xml.stream.events.Attribute; 
import javax.xml.stream.events.XMLEvent; 

public class XmlReader 
{ 

public static void main(String[] args) throws XMLStreamException, IOException 
{ 
    XMLParseAttribute("input.xml"); 
} 

public static void XMLParseAttribute(String fileName) throws XMLStreamException, IOException 
{ 

    XMLInputFactory inputFactory = XMLInputFactory.newInstance(); 
    InputStream in = new FileInputStream(fileName); 
    XMLEventReader eventReader = inputFactory.createXMLEventReader(in); 
    XMLEvent event; 

    while (eventReader.hasNext()) 
    { 
     event = eventReader.nextEvent(); 

     if (event.isStartElement()) 
     { 
      String elemntName = event.asStartElement().getName().getLocalPart(); 
      System.out.println(elemntName); 
      Iterator<Attribute> iterator = event.asStartElement().getAttributes(); 
      while (iterator.hasNext()) 
      { 
       Attribute attribute = iterator.next(); 
       String value = attribute.getValue(); 
       String name = attribute.getName().toString(); 
       System.out.println("\t" + name + " " + value); 
      } 
     } 
    } 
}} 

희망이다 java xml on jenkov

+0

나는 이것을 얻었고, 이전에 클래스 형식 java.swing Attributes를 가져 왔습니다. 이제 javax.xml.stream.events.Attribute.It을 가져 와서 변경되었습니다. 이제는 잘 작동합니다. 실수는 가져 오기에서 이름과 가치 방법을 얻지 못했습니다. – user3592502

+0

좋은 소식, 항상이 간단한 것들을 돌봐주세요 영원히 계속해서 희망이 있습니다 (: – Anas