2016-02-14 179 views
0

getAttribute(「...」)在第一個循環中正常工作,但在第二個中(對於'效果'標記)它返回null。 「的ATT的長度:」 始終爲0。我只是不明白爲什麼它失敗:( 'effectElement.getTagName()' 返回 '效果',因爲它應該XPath屬性解析

XML:

<card id="1" card_type="door" name="cleric_1"> 
    <img>c_cleric_1</img> 
    <slot>6</slot> 
    <size>small</size> 
    <value>0</value> 
    <curse>false</curse> 
    <effects> 
     <effect type="ClassChangeEffect" args="Cleric"></effect> 
    </effects> 
</card> 

JAVA :

........ > 
     NodeList nodeList = (NodeList) xpath.evaluate("/list/card", doc, XPathConstants.NODESET); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      Node node = nodeList.item(i); 
      if (node.getNodeType() == Node.ELEMENT_NODE) { 
       Element elem = (Element) node; 
       String type = elem.getAttribute("card_type"); 
       String name = elem.getAttribute("name"); 
       String imgPath = elem.getElementsByTagName("img").item(0).getTextContent(); 
       BodySlot bodySlot = BodySlot.getSlotByIndex(Integer.parseInt(elem.getElementsByTagName("slot").item(0).getTextContent())); 
       ItemSize itemSize = elem.getElementsByTagName("size").item(0).getTextContent().equals("big") ? ItemSize.BIG : ItemSize.SMALL; 
       int value = Integer.parseInt(elem.getElementsByTagName("value").item(0).getTextContent()); 
       boolean isCurse = Boolean.getBoolean(elem.getElementsByTagName("curse").item(0).getTextContent()); 
       List<Effect> effectsList = new ArrayList<Effect>(); 

       NodeList effectsNodeList = elem.getElementsByTagName("effects"); 
       for (int j = 0; j < effectsNodeList.getLength(); j++) { 
        Node effectNode = effectsNodeList.item(j); 
        if (effectNode.getNodeType() == Node.ELEMENT_NODE) { 
         Element effectElement = (Element) effectNode; 
         System.out.println("Length of atts: " + effectElement.getAttributes().getLength()); 
         String effectName = effectElement.getAttribute("type"); 
         String[] args = effectElement.getAttribute("args").split(","); 
         effectsList.add(effectCreator(effectName, args)); 
        } 
       } 
       < ........ 
      } 
     } 

回答

0

你錯過了一個嵌套的循環或聲明:

  NodeList effectsNodeList = elem.getElementsByTagName("effects"); 

這裏你LIS t效應元素。所以,你需要添加更多的每個元素從上面的列表:

  NodeList effectNodeList = effectsElement.getElementsByTagName("effect"); 

然後遍歷因爲你已經做...

+0

是的,你是對的。我錯過了:(但現在它應該如此,謝謝:) –