Java Android XML解析:解析这种特殊类型的XML我对此没有Idia

Java Android XML解析:解析这种特殊类型的XML我对此没有Idia,java,php,android,xml,xml-parsing,Java,Php,Android,Xml,Xml Parsing,这是XML URL 我们如何在Android中解析 <Aajkamrankhankaysath p0201="" p0801="" p0901="" p1501="" p1601="" p2201="" p2301="" p2901="" p3001="" p0702="" p2102="" p0303="" p0403="" p0603="" p1003="" p1103="" p1203="" p1303="" p1703="" p1803="" p1903="" p2003=""

这是XML URL

我们如何在Android中解析

<Aajkamrankhankaysath p0201="" p0801="" p0901="" p1501="" p1601="" p2201="" p2301="" p2901="" p3001="" p0702="" p2102="" p0303="" p0403="" p0603="" p1003="" p1103="" p1203="" p1303="" p1703="" p1803="" p1903="" p2003="" p2403="" p2503="" p2603="" p2703="" p2803="" p3103="" p0104="" p0204="" p0304="" p0404="" p0704="" p0804="" p0904="" p1004="" p1104="" p1404="" p1504="" p1604="" p1704="" p1804="" p2104="" p2204="" p2304="" p2404="" p2804="" p2904="" p3004="" p0105="" p0205="" p0505="" p0605="" p0705="" p0805="" p0905="" p1205="" p1305="" p1405="" p1505="" p1605="" p1905="" p2005="" p2105="" p2205="" p2305="" p2705="" p2805="" p2905="" p3005="" p0206="" p0306="" p0406="" p0506="" p2306="" p2406="" p2506="">25</Aajkamrankhankaysath>
25
我想得到像:p0201,p0801,p0901,p1501,p1501。。。等等


我想保存在ArrayList中,是指分别保存在AaryList中的标记数据

首先,有人已经提到了这些属性。使用格式如此糟糕的XML肯定不是一个好主意,即使web服务很大,但我可以看到它的开发方式非常糟糕。撇开个人观点不谈,您需要创建自己的类来填充对象列表。您将需要通读每个节点,并手动填充每个属性,并且没有捷径(据我所知)


您将有一个TVNode类型的列表,您将从文件或web响应中读取XML,一旦有了它,您将需要使用某种类型的XMLDOMParser对其进行解析。我希望这会有所帮助。

xmlpullparser比加载文档更快。它完全适合您在问题中的xml示例

        XmlPullParser xpp;
        XmlPullParserFactory factory = null;

        factory = XmlPullParserFactory.newInstance();
        xpp = factory.newPullParser();
        xpp.setInput(kmlis, "UTF-8");  //todo get your input into inputstream


        int eventType = xpp.getEventType();
        while (true) {
            if (eventType == XmlPullParser.START_TAG) {
                if (xpp.getName().equals("aajdsaklhandsksplsb")){
                 int x = xpp.getAttributeCount();
                  for (int i = 0;i<x;i++){
                      String name = xpp.getAttributeName(i);
                      String value = xpp.getAttributeValue(i)
                       log.d("test", name + "=" + value);
                  }

                 }
            }
             else if (eventType == XmlPullParser.END_DOCUMENT) {break;}

         eventType = xpp.getEventType();
         }
XmlPullParser-xpp;
XmlPullParserFactory工厂=null;
factory=XmlPullParserFactory.newInstance();
xpp=factory.newPullParser();
xpp.设置输入(kmlis,“UTF-8”)//将您的输入获取到inputstream中
int eventType=xpp.getEventType();
while(true){
if(eventType==XmlPullParser.START_标记){
if(xpp.getName().equals(“aajdsaklhandskspsb”)){
int x=xpp.getAttributeCount();

对于(int i=0;i这一定是最差的XML格式,有一些其他解析器,如XMLPullParser、DOMParser和SAXParser,但您可以使用XMLPullParser根据您的要求获取属性值

以下是示例xml:

<message id="abc@web.hightech.com" from="web.hightect.com" text="Hello World">
<firstname>Marie Josèphe</firstname>
<lastname>Joseph</lastname>
</message>

玛丽·何塞·菲
约瑟夫
这是一个完整的解析器,您可以使用这个通用解析器来满足您的需求 示例:您可以从第一个属性获取id和文本

    public class New_Generic_Parser {
    public static ArrayList<String> list = new ArrayList<String>();
    XmlPullParserFactory xmlFactoryObject = null;
    String payload,option_text1,option_text2;

    public New_Generic_Parser() {
    payload = "";
    list = new ArrayList<String>();
    option_text1 = "";
    option_text2 = "";
    }

    private void parseXMLAndStoreIt(XmlPullParser myParser) {
    int event;
    try {
    event = myParser.getEventType();
    while (event != XmlPullParser.END_DOCUMENT) {
    String name=myParser.getName();
    switch (event){
    case XmlPullParser.START_TAG:
    if(name.equalsIgnoreCase("user")){
    option_text1 = myParser.getAttributeValue(null, "id");
    option_text2 = myParser.getAttributeValue(null,"text");
    //get attribute from here:
    }
     break;
    case XmlPullParser.TEXT:
        if(name.equalsIgnoreCase("user")){
            list.add(myParser.getText());
        }
   break;
   case XmlPullParser.END_TAG:
      String pic = list.get(0).toString();
      byte [] encodeByte=Base64.decode(pic,Base64.DEFAULT);
      Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
   break;
   }         
   event = myParser.next(); 
 }
//    parsingComplete = false;
} catch (Exception e) {
    e.printStackTrace();
 }
    }
    public void genericparser(String payload){
    try {
         InputStream stream = new ByteArrayInputStream(payload.getBytes());
         xmlFactoryObject = XmlPullParserFactory.newInstance();
         XmlPullParser myparser = xmlFactoryObject.newPullParser();
         myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
         myparser.setInput(stream, null);
         parseXMLAndStoreIt(myparser);
         stream.close();
      } catch (Exception e) {
        // TODO: handle exception
    }
   } 
公共类新建\u通用\u解析器{
public static ArrayList list=new ArrayList();
XmlPullParserFactoryXmlFactoryObject=null;
字符串有效负载,选项_text1,选项_text2;
public New_Generic_Parser(){
有效载荷=”;
列表=新的ArrayList();
选项_text1=“”;
选项_text2=“”;
}
私有void parseXMLAndStoreIt(XmlPullParser myParser){
int事件;
试一试{
event=myParser.getEventType();
while(event!=XmlPullParser.END_文档){
String name=myParser.getName();
开关(事件){
case XmlPullParser.START_标记:
if(name.equalsIgnoreCase(“用户”)){
option_text1=myParser.getAttributeValue(null,“id”);
option_text2=myParser.getAttributeValue(null,“text”);
//从此处获取属性:
}
打破
case XmlPullParser.TEXT:
if(name.equalsIgnoreCase(“用户”)){
add(myParser.getText());
}
打破
case XmlPullParser.END_标记:
字符串pic=list.get(0.toString();
byte[]encodeByte=Base64.decode(pic,Base64.DEFAULT);
位图位图=位图工厂.decodeByteArray(encodeByte,0,encodeByte.length);
打破
}         
event=myParser.next();
}
//parsingComplete=false;
}捕获(例外e){
e、 printStackTrace();
}
}
public void genericparser(字符串负载){
试一试{
InputStream=新的ByteArrayInputStream(payload.getBytes());
xmlFactoryObject=XmlPullParserFactory.newInstance();
XmlPullParser myparser=xmlFactoryObject.newPullParser();
setFeature(XmlPullParser.FEATURE_进程_名称空间,false);
setInput(流,空);
parseXMLAndStoreIt(myparser);
stream.close();
}捕获(例外e){
//TODO:处理异常
}
} 

这肯定是我见过的最糟糕的XML格式。您需要的各个部分(如p0201、p0801等)都是XML“属性”。您是否可以控制服务器/数据源?如果可以,我建议您更改数据的显示方式(可能是JSON)。谢谢@Squonk无法解析此类XML mean get属性,如p0201、p0801、p0901、p1501、p1501…@Squonk eboundservices不是一个小服务,我认为这是可能的:)在查看链接后,您必须对start_标记进行精细处理,以获取节点的名称,然后通过小循环获取该名称的所有属性。
    public class New_Generic_Parser {
    public static ArrayList<String> list = new ArrayList<String>();
    XmlPullParserFactory xmlFactoryObject = null;
    String payload,option_text1,option_text2;

    public New_Generic_Parser() {
    payload = "";
    list = new ArrayList<String>();
    option_text1 = "";
    option_text2 = "";
    }

    private void parseXMLAndStoreIt(XmlPullParser myParser) {
    int event;
    try {
    event = myParser.getEventType();
    while (event != XmlPullParser.END_DOCUMENT) {
    String name=myParser.getName();
    switch (event){
    case XmlPullParser.START_TAG:
    if(name.equalsIgnoreCase("user")){
    option_text1 = myParser.getAttributeValue(null, "id");
    option_text2 = myParser.getAttributeValue(null,"text");
    //get attribute from here:
    }
     break;
    case XmlPullParser.TEXT:
        if(name.equalsIgnoreCase("user")){
            list.add(myParser.getText());
        }
   break;
   case XmlPullParser.END_TAG:
      String pic = list.get(0).toString();
      byte [] encodeByte=Base64.decode(pic,Base64.DEFAULT);
      Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
   break;
   }         
   event = myParser.next(); 
 }
//    parsingComplete = false;
} catch (Exception e) {
    e.printStackTrace();
 }
    }
    public void genericparser(String payload){
    try {
         InputStream stream = new ByteArrayInputStream(payload.getBytes());
         xmlFactoryObject = XmlPullParserFactory.newInstance();
         XmlPullParser myparser = xmlFactoryObject.newPullParser();
         myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
         myparser.setInput(stream, null);
         parseXMLAndStoreIt(myparser);
         stream.close();
      } catch (Exception e) {
        // TODO: handle exception
    }
   }