xpath解析的工具类


public class XmlResolver {
    private Document document;

    public XmlResolver(String xml) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        builder = factory.newDocumentBuilder();
        document = builder.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
    }

    public List<String> searchCdataNodeByXPath(String xPathExpr) {
        List<String> nodeStrList = new ArrayList<String>();
        if (document != null) {
            XPath xPath = XPathFactory.newInstance().newXPath();
            try {
                XPathExpression expr = xPath.compile(xPathExpr);
                NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
                if (nodes != null) {
                    for (int i = 0;i < nodes.getLength();i++) {
                        Node node = nodes.item(i);
                        if (node != null) {
                            nodeStrList.add(node.getTextContent());
                        }
                    }
                    return nodeStrList;
                }

            } catch (XPathExpressionException e) {
                e.printStackTrace();
            }
        }
        return nodeStrList;
    }

    public List<Node> searchNodeByXPath(String xPathExpr) {
        List<Node> nodeList = new ArrayList<Node>();
        if (document != null) {
            XPath xPath = XPathFactory.newInstance().newXPath();
            try {
                XPathExpression expr = xPath.compile(xPathExpr);
                NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
                if (nodes != null) {
                    for (int i = 0;i < nodes.getLength();i++) {
                        nodeList.add(nodes.item(i));
                    }
                    return nodeList;
                }
            } catch (XPathExpressionException e) {
                e.printStackTrace();
            }
        }
        return nodeList;
    }

    public Node searchFirstNodeByXPath(String xPathExpr) {
        List<Node> nodeList = searchNodeByXPath(xPathExpr);
        return nodeList.isEmpty() ? null : nodeList.get(0);
    }

    public String getTextValue(String xPath) {
        Node node = this.searchFirstNodeByXPath(xPath);
        if (node != null) {
            return node.getTextContent();
        }
        return null;
    }

    public String getAttrValue(String xPath, String attrName) {
        Node node = this.searchFirstNodeByXPath(xPath);
        if (node == null) {
            return null;
        }
        Node attr = node.getAttributes().getNamedItem(attrName);
        if (attr == null) {
            return null;
        }
        return attr.getTextContent();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值