2015-05-27 2 views
1

Как получить цвет-элемент и его атрибуты в следующем XML-документJava - Получить второй элемент XML-документ - DOM

<drawingobject> 
    <oval x="240" y="325" width="15" height="15" filled="yes"> 
     <color r="0" g="255" b="255"></color> 
    </oval> 
</drawingobject> 

и ОТД взгляд любит это для овала

<!-- elementet oval --> 
<!ELEMENT oval (color?)> 
<!ATTLIST oval x CDATA #REQUIRED> 
<!ATTLIST oval y CDATA #REQUIRED> 
<!ATTLIST oval width CDATA #REQUIRED> 
<!ATTLIST oval height CDATA #REQUIRED> 
<!ATTLIST oval filled (yes | no) "no"> 

Я могу получить элемент «oval» и его атрибуты, но не знаю, как проверить, содержит ли он элемент цвета, а IF - получить его.

Вот код

private void parse() throws Exception { 

    String docName = System.getProperty("user.home") + "/Desktop/" + "myxml.xml"; 
    File file = new File(docName); 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document document = db.parse(file); 
    NodeList nodeList = document.getElementsByTagName("oval"); 
    oval = new int[nodeList.getLength()][5]; 

    for(int i= 0; i < nodeList.getLength(); i++) { 

     oval[i][0] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("x").getNodeValue()); 
     oval[i][1] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("y").getNodeValue()); 
     oval[i][2] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("width").getNodeValue()); 
     oval[i][3] = Integer.parseInt(nodeList.item(i).getAttributes().getNamedItem("height").getNodeValue()); 

     if (nodeList.item(i).getAttributes().getNamedItem("filled").getNodeValue().equals("yes")) { 
      oval[i][4] = 1; 
     } else { 
      oval[i][4] = 0; 
     } 


     Element ovalNode = (Element) nodeList.item(i); 
     NodeList colorNodes = ovalNode.getElementsByTagName("color"); 
     if(colorNodes.getLength() > 0) { 
      System.out.println(colorNodes.item(i).getNodeName()); 
     } 

    } 

StackTrace

java.lang.NullPointerException 
at test.parse(test.java:60) 
at test.<init>(test.java:28) 
at test.main(test.java:17) 

System.out.println (colorNodes.item (я) .getNodeName()); находится в строке 60

ответ

2

Точно так же вы делаете, чтобы получить элементы oval: используя Element.getElementsByTagName(String elementName). У вас уже есть oval элементы, которые вы цикл над, так что вы можете просто вызвать этот метод на каждом элементе итерированного:

for(int i= 0; i < nodeList.getLength(); i++) { 
    ... 

    Element ovalNode = (Element) nodeList.item(i); 
    NodeList colorNodes = ovalNode.getElementsByTagName("color"); 
    if(colorNodes.getLength() > 0) { 
     System.out.println(colorNodes.item(0).getNodeName()); // prints "color" 
     ... // do something with the node 
    } 
} 
+0

ОК, но я получаю NullPointerException в строке «System.out ...», когда попробовав этот код. В чем причина? – java

+0

@java Не могли бы вы обновить новый код и трассировку стека исключений? – manouti

+0

Я обновил код – java