Maison  >  Article  >  développement back-end  >  Android XPath analyse XML

Android XPath analyse XML

黄舟
黄舟original
2017-02-09 13:55:502173parcourir

XPath est un langage permettant de rechercher des informations dans des documents XML. XPath peut être utilisé pour parcourir des éléments et des attributs dans des documents XML.

XPath est un élément majeur de la norme XSLT du W3C, et XQuery et XPointer sont construits sur des expressions XPath.

Par conséquent, comprendre XPath est la base de nombreuses applications XML avancées. Pour en savoir plus sur XPath, veuillez consulter http://www.w3school.com.cn/xpath/index.asp.

XPath ne convient que pour interroger des informations XML. Il est recommandé de ne pas utiliser cette méthode pour l'analyse complète des fichiers XML. Les meilleures façons d'analyser les fichiers XML sont Sax et Pull.

J'ai fait ce test sur le système Android 2.2, je ne sais pas si cela fonctionnera s'il est inférieur à 2.2.

Ce qui suit est une description détaillée des étapes permettant à XPath d'analyser XML : xpathTest.xml est le même que DomTest.xml dans la méthode XML d'analyse dom Android

1. >

2. Obtenez une instance XPathFactory.

3. Utilisez l'instance XPathFactory pour obtenir l'instance XPath

4. XPath appelle la méthode évaluer() pour obtenir la NodeList interrogée

private void xPathParserXml(){  
        //获取XPathFactory实例  
        XPathFactory factory = XPathFactory.newInstance();  
        //用工程生成XPath实例,解析xml  
        XPath xpath = factory.newXPath();  
        //  
        try {  
            InputSource source = new InputSource(getResources().getAssets().open("xPathTest.xml"));  
          
            //第一个参数:需要查询的节点名称,必须要在节点前加“//”  
            //第二个参数:查询的输入源  
            //第三个参数:返回的类型  
//          NodeList nodeList = (NodeList) xpath.evaluate("//group", source, XPathConstants.NODESET);  
//          if(nodeList != null && nodeList.getLength() > 0){  
//              for(int i = 0;i < nodeList.getLength();i++){  
//                  Node node = nodeList.item(i);  
//                  //在这也可以得到<group>的子节点<person>。但是这样不符合xpath的风格。  
//                  NodeList personList = node.getChildNodes();  
//                  Element  nodeAttr =(Element)node;  
//                  String groupName = nodeAttr.getAttribute("name");  
//                  String num = nodeAttr.getAttribute("num");  
//                    
//                  Log.e("TEST", ""+groupName+"   "+num);  
//              }  
//          }  
              
//          //获取<person>节点信息  
//          NodeList personList = (NodeList) xpath.evaluate("//person", source, XPathConstants.NODESET);  
//          if(personList != null && personList.getLength() > 0){  
//              for(int i = 0;i < personList.getLength();i++){  
//                  Element node = (Element)personList.item(i);  
//                  //在这也可以得到<person>的子节点<chinese>和<english>。  
//                  NodeList childList = node.getChildNodes();  
//                  String groupName = node.getAttribute("name");  
//                  String age = node.getAttribute("age");  
//                    
//                  Log.e("TEST", ""+groupName+"   "+age);  
//              }  
//          }  
              
            //获取<chinese>节点信息  
            NodeList chineseList = (NodeList) xpath.evaluate("//chinese", source, XPathConstants.NODESET);  
            if(chineseList != null && chineseList.getLength() > 0){  
                for(int i = 0;i < chineseList.getLength();i++){  
                    Node node = chineseList.item(i);  
                    String chinese = node.getTextContent();  
                    Log.e("TEST", ""+chinese);  
                }  
            }  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (XPathExpressionException e) {  
            e.printStackTrace();  
        }  
          
    }
Remarque : xpath. évalue() Il ne peut pas être appelé deux fois et une erreur sera signalée. La raison n'est pas claire. Si vous connaissez la raison, veuillez laisser un message pour nous le faire savoir, merci.

Certaines personnes ont demandé si XPath pouvait interroger des fichiers XML volumineux (plus de 1 Mo ou plus). Cela devrait être possible en théorie, tant que vous pouvez résoudre le problème de la capacité d'InputSource à lire des fichiers de grande capacité. .

Ce qui précède est le contenu d'Android XPath analysant XML. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn