![](/img/trans.png)
[英]XPATH + Parsing a XML in java + need to get a attribute checked to access the next sibling value
[英]XPath attribute parsing
第一个循环中的getAttribute(“ ...”)工作正常,但在第二个循环中(对于'effect'标签),它返回null。 “攻击长度:”始终为0。我只是不明白为什么失败:(''effectElement.getTagName()'应该返回'effect'。
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));
}
}
< ........
}
}
您缺少一个嵌套循环或语句:
NodeList effectsNodeList = elem.getElementsByTagName("effects");
在这里,您可以获得效果元素列表。 因此,您需要为以上列表中的每个元素添加一个:
NodeList effectNodeList = effectsElement.getElementsByTagName("effect");
然后像你已经做的那样循环播放...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.