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));
}
}
< ........
}
}
是的,你是对的。我错过了:(但现在它应该如此,谢谢:) –