使用属性获取元素

时间:2011-05-23 05:20:18

标签: java xml

我使用Java解析Xml,我想借助属性值解析元素。

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

在此我想使用att值解析tag1数据。我是java和xml的新手。请指导我。

3 个答案:

答案 0 :(得分:4)

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

以下是相关问题:


这是您要求的解决方法。我永远不会建议使用这种类型的“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:未提供代码评论。它是作为练习给予读者的。 :)

答案 1 :(得分:4)

这是获取具有给定属性名称和值的子节点的java代码。这是你在找什么

    public static Element getNodeWithAttribute(Node root, String attrName, String attrValue)
{
    NodeList nl = root.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        Node n = nl.item(i);
        if (n instanceof Element) {
            Element el = (Element) n;
            if (el.getAttribute(attrName).equals(attrValue)) {
                return el;
            }else{
       el =  getNodeWithAttribute(n, attrName, attrValue); //search recursively
       if(el != null){
        return el;
       }
    }
        }
    }
    return null;
}

答案 2 :(得分:0)

这是一个老问题,但您可以使用HTMLUnit

 HtmlAnchor a = (HtmlAnchor)ele;
 url = a.getHrefAttribute();