使用属性获取元素


问题内容

我正在使用Java解析Xml,我想在属性值的帮助下解析元素。

例如 <tag1 att="recent">Data</tag1>

在这种情况下,我想使用att值解析tag1数据。我是java和xml的新手。请引导我。


问题答案:

有多种方法可以做到这一点。您可以使用xPath(示例),DOM
Document或SAX Parser(示例)来检索属性值和标记元素。


这是您要求的解决方法。我从不建议使用“ hack”类型,而是使用SAX(请参见示例链接)。

public static Element getElementByAttributeValue(Node rootElement, String attributeValue) {

    if (rootElement != null && rootElement.hasChildNodes()) {
        NodeList nodeList = rootElement.getChildNodes();

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

            if (subNode.hasAttributes()) {
                NamedNodeMap nnm = subNode.getAttributes();

                for (int j = 0; j < nnm.getLength(); j++) {
                    Node attrNode = nnm.item(j);

                    if (attrNode.getNodeType == Node.ATTRIBUTE_NODE) {
                        Attr attribute = (Attr) attrNode;

                        if (attributeValue.equals(attribute.getValue()) {
                            return (Element)subNode;
                        } else {
                            return getElementByAttributeValue(subNode, attributeValue);
                        }
                    }
                }               
            }
        }
    }

    return null;
}

PS: 未提供代码注释。它是作为练习给读者的。:)