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

Android XPath analyse XML

黄舟
黄舟original
2017-02-17 15:26:181949parcourir




XPath est un langage A pour 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, une compréhension de XPath est la base de nombreuses applications XML avancées. Pour en savoir plus sur XPath, veuillez vous référer à http://www.php.cn/.

XPath ne convient que pour interroger des informations XML. Il n'est pas recommandé d'utiliser cette méthode pour une analyse complète des fichiers XML. La meilleure façon d'analyser les fichiers XML doit être sax et. tirer. Deux façons.

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.

Parlons en détail des étapes d'analyse XML de XPath : xpathTest.xml et android La façon dont dom analyse XML est la même que DomTest.xml dans

1. Créer des sources d'entrée

2. Obtenez l'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.evaluate() 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.


Quelqu'un a demandé si XPath pouvait interroger de gros fichiers XML (plus de 1 Mo environ). Cela devrait être possible en théorie, à condition que vous le fassiez. peut simplement résoudre le problème selon lequel InputSource peut 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