XPath解析xml

通常我们使用xml解析的时候都是通过一层层遍历的形式进行解析,那样在对于知道指定属性是的解析效率很低。XPath解析技术是直接解析到指定路径的一个解析方式,方便高效,XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的东西。

话不多说,直接上代码:

1、XML格式如下: 屏幕空间有限,后面的尾部</>请自行恶补...微笑

2、使用xpath进行解析:以下是必备的几个引用包,若是使用类似于DOM4使用XPath则另说:

3、解析

    private final String INPUTFORMAT_XPATH = "//InputFormat";      //直接指定到特定路径,不用遍历去查找
    private final String PROCEDURE_XPATH = "//IndexDataProcess/Procedures/Procedure";  //直接指定到特定路径,不用遍历去查找

    private final String PROCEDURES_COLLECTION_XPATH = "//ProceduresCollection";     //直接指定到特定路径,不用遍历去查找

  public Processor( String configFile)  //此方法xml的路径传入进行解析

{                  
        XPathFactory xpathFactory = XPathFactory.newInstance();                   //创建xpath工厂实例
        XPath xpath = xpathFactory.newXPath();                             //工厂创建xpath实例
        try {

           //定位到节点,在configFile文件中找到INPUTFORMAT_XPATH路径的这个XPathConstants.NODE节点

            Node inFormatNode = (Node) xpath.evaluate(INPUTFORMAT_XPATH,
             new InputSource(configFile), XPathConstants.NODE);   

             //XPathConstants.NODEXPathConstants.NODE节点获取属性只能通过getAttributes();
            NamedNodeMap inFormatAtts = inFormatNode.getAttributes();  

          //得到此节点内的CLASS名称属性再getNodeValue()获取到此名称属性的值

             String inFormatCName = inFormatAtts.getNamedItem(CLASS).getNodeValue();

            Class inFormatClass = Class.forName(inFormatCName);          
            inputFormat = (InputFormat) inFormatClass.newInstance();          //实例化此类的一个对象
            inputFormat.init( inFormatNode);      //调用init(Node node)方法

}

//*********************************************************************************************************//

init(Node node){                                   //以下的代码我就不一一解释注释了,跟上面方法差不多,只是进一步解析node节点,

if (node != null) {
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            try {
                Node MQSNode = (Node) xpath.evaluate("MQS", node, XPathConstants.NODE);         
                NodeList MQSNodeList = (NodeList) xpath.evaluate("String", MQSNode, XPathConstants.NODESET);
                
                if (MQSNodeList != null) {
                    this.mq_info = new HashMap<String, String>(MQSNodeList.getLength());
                    for (int i = 0; i < MQSNodeList.getLength(); i++) {
                        NamedNodeMap attributes = MQSNodeList.item(i).getAttributes();
                        String name = attributes.getNamedItem(FIELD_NAME).getNodeValue().trim();   //获取到了对应节点的FIELD_NAME值
                        String value = attributes.getNamedItem(FIELD_VALUE).getNodeValue().trim();    //获取到了对应节点的FIELD_VALUE值

                   
                    }
                }
}

 为了能很好的注释解释清楚,我直接把代码复制上来而不是用图直接粘贴,我也是够拼的...........

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值