Java XPath解析XML

解析这样一个XML:

<?xml version='1.0' encoding='UTF-8'?>
<config>
	<global>
		<projects findbugs = "true" junit = "false" cobertura = "true" checkstyle = "false"/>
	</global>
	<local>
		<project name = "projectA" junit = "false" findbugs = "true" checkstyle = "false"/>
		<project name = "projectB" junit = "false" findbugs = "true" checkstyle = "false"/>
	</local>
</config>
解析也很简单:

public boolean parse() {
        boolean r = false;

        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document document = builder.parse(new File(filename));
            XPath xPath = XPathFactory.newInstance().newXPath();

            String path = null;

            path = String.format("/config/local/project[@name='%s']/@findbugs", projectName);
            Boolean projectFindBugs = (Boolean)xPath.evaluate(path, document, XPathConstants.BOOLEAN);
            path = String.format("/config/local/project[@name='%s']/@junit", projectName);
            Boolean projectJUnit = (Boolean)xPath.evaluate(path, document, XPathConstants.BOOLEAN);
            path = String.format("/config/local/project[@name='%s']/@cobertura", projectName);
            Boolean projectCobertura = (Boolean)xPath.evaluate(path, document, XPathConstants.BOOLEAN);
            path = String.format("/config/local/project[@name='%s']/@checkstyle", projectName);
            Boolean projectCheckStyle = (Boolean)xPath.evaluate(path, document, XPathConstants.BOOLEAN);

            // 如果局部配置不能被正确识别,或者配置为false,再检查全局配置
            if (projectFindBugs == null || !projectFindBugs.booleanValue()) {
                findbugsConfigured = (Boolean) xPath.evaluate("/config/global/projects/@findbugs", document, XPathConstants.BOOLEAN);
            } else {
                findbugsConfigured = projectFindBugs.booleanValue();
            }

            if (projectJUnit == null || !projectJUnit.booleanValue()) {
                junitSkip = (Boolean) xPath.evaluate("/config/global/projects/@junit", document, XPathConstants.BOOLEAN);
            } else {
                junitSkip = projectJUnit.booleanValue();
            }

            if (projectCobertura == null || !projectCobertura.booleanValue()) {
                coberturaConfigured = (Boolean) xPath.evaluate("/config/global/projects/@cobertura", document, XPathConstants.BOOLEAN);
            } else {
                coberturaConfigured = projectCobertura.booleanValue();
            }

            if (projectCheckStyle == null || !projectCheckStyle.booleanValue()) {
                checkstyleConfigured = (Boolean) xPath.evaluate("/config/global/projects/@checkstyle", document, XPathConstants.BOOLEAN);
            } else {
                checkstyleConfigured = projectCheckStyle.booleanValue();
            }

            r = true;
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }

        return r;
    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网速递520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值