xmlns utiliza qué que programacion prefijo para nombres namespace está espacio definido java android xml xml-parsing xmlpullparser

java - utiliza - Manejo de espacios de nombres Xml con XmlPullParser



wikipedia xsd (1)

Puede distinguirlos por llamada al método getPrefix . Algunos códigos de prueba:

try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser parser = factory.newPullParser(); InputStream input = getResources().openRawResource(R.raw.test); parser.setInput(input, HTTP.UTF_8); int eventType = parser.getEventType(); while(eventType != XmlPullParser.END_DOCUMENT){ if(eventType == XmlPullParser.START_TAG){ String prefix = parser.getPrefix(); String name = parser.getName(); Log.i("XML", String.format("prefix=%s,name=%s",prefix,name)); if( "dif".equals(prefix)){ handleDiff(parser); }else if ("res".equals(prefix)){ handleRes(parser); } } eventType = parser.next(); } } catch (Exception e) { Log.e("XML","",e); }

Logcat out put para sus datos de prueba:

prefix=res,name=resource prefix=res,name=message prefix=dif,name=person prefix=dif,name=name prefix=dif,name=description

Aquí estoy usando XmlPullParser para analizar el documento a continuación. No funciona debido a los espacios de nombres, ¿cómo puedo analizar con espacios de nombres?

XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(in, HTTP.UTF_8); String namespace = xpp.getNamespace(); boolean inMessage = false; int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { //START TAGS if(eventType == XmlPullParser.START_TAG) { if(xpp.getName().equals(namespace+"resource")) { httpCode = Integer.valueOf( xpp.getAttributeValue(null, "code").trim() ); type = xpp.getAttributeValue(null, "type").trim(); } else if(xpp.getName().equals(namespace+"message")) { inMessage = true; } //TAG TEXT } else if(eventType == XmlPullParser.TEXT) { if(inMessage) { message = xpp.getText().trim(); break; //CANCEL the iteration } } else if(eventType == XmlPullParser.END_TAG) { if(inMessage) { inMessage = false; } } eventType = xpp.next(); }

Aquí hay un ejemplo del tipo de documento que quiero analizar

<?xml version="1.0" encoding="UTF-8"?> <res:resource xmlns:res="http://www.example.com/ns/server/resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/ns/server/resource resource.xsd " version="1" > <res:message httpCode="200" type="ok" > <![CDATA[Sample Success Response]]> </res:message> <dif:person xmlns:dif="http://www.example.com/ns/server/resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/ns/server/person person.xsd " version="1" > <dif:name>test name</dif:name> <dif:description lang="en">test description</dif:description> </dif:person > </res:resource>

Quiero analizar res y dif separado.