繁体   English   中英

XPath属性解析

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM