2013-06-02 4 views
0

У меня вопрос о разборе XML-файла. Допустим, у меня есть XML-файл:XML-парсер - как получить значения из узлов

<line> 
    <point> 
     <X>100</X> 
     <Y>100</Y> 
    </point> 
    <point> 
     <X>200</X> 
     <Y>200</Y> 
    </point> 
</line> 

, и я хотел бы разобрать его с помощью DOM:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(f); 
    doc.getDocumentElement().normalize(); 
    NodeList nList = doc.getElementsByTagName("point"); 

    for (int temp = 0; temp < nList.getLength(); temp++) { 

     Node nNode = nList.item(temp); 

     if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

      Element eElement = (Element) nNode; 

      System.out.println("x: " + eElement.getElementsByTagName("X").item(0).getTextContent()); 

Но - как я могу получить X и Y из файла XML в виде целых чисел? - сначала X как x1, сначала Y как y1 и второй X как x2, а второй Y как y2?

Я пробовал:

int x1 = Integer.valueOf(eElement.getAttribute("X")); 
int y1 = Integer.valueOf(eElement.getAttribute("Y")); 

, но без успеха

+0

работает '' System.out.println() ', как и ожидалось? – jlordo

+0

Каждая строка имеет две 'точки' и следуют этой структуре? – acdcjunior

+0

System.out.println работает без проблем – DRastislav

ответ

1
// Get the <line> element 
NodeList nList = doc.getElementsByTagName("line"); 
Element line = (Element) nList.item(0); 

// Get each <point> element from the <line> 
Element point1 = (Element) line.getElementsByTagName("point").item(0); 
Element point2 = (Element) line.getElementsByTagName("point").item(1); 

// Get each <X> and <Y> from each <point> retrieved before 
Integer x1 = Integer.parseInt(point1.getElementsByTagName("X").item(0).getTextContent()); 
Integer y1 = Integer.parseInt(point1.getElementsByTagName("Y").item(0).getTextContent()); 
Integer x2 = Integer.parseInt(point2.getElementsByTagName("X").item(0).getTextContent()); 
Integer y2 = Integer.parseInt(point2.getElementsByTagName("Y").item(0).getTextContent()); 

Весь код:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(f); 
doc.getDocumentElement().normalize(); 

NodeList nList = doc.getElementsByTagName("line"); 

Element line = (Element) nList.item(0); 

Element point1 = (Element) line.getElementsByTagName("point").item(0); 
Element point2 = (Element) line.getElementsByTagName("point").item(1); 

Integer x1 = Integer.parseInt(point1.getElementsByTagName("X").item(0).getTextContent()); 
Integer y1 = Integer.parseInt(point1.getElementsByTagName("Y").item(0).getTextContent()); 
Integer x2 = Integer.parseInt(point2.getElementsByTagName("X").item(0).getTextContent()); 
Integer y2 = Integer.parseInt(point2.getElementsByTagName("Y").item(0).getTextContent()); 

System.out.println("x1: " + x1 + "\ty1: " + y1 + "\tx2: " + x2 + "\ty2: " + y2); 

Выход:

x1: 100 y1: 100 x2: 200 y2: 200 
+0

Спасибо, это работает :) – DRastislav

Смежные вопросы