Heim  >  Artikel  >  Backend-Entwicklung  >  XML-Übersicht und Beispielcode für Pull-Parsing

XML-Übersicht und Beispielcode für Pull-Parsing

黄舟
黄舟Original
2017-03-18 17:41:291796Durchsuche


XMLÜbersicht und Pull-Parsing-Details

 ONE Goal ,ONE Passion !

Das am weitesten entwickelte Android ist JSON und das Parsen ist Xstream Wird für XML verwendet, und ich habe das manuelle Parsen von XML fast vergessen. Im Allgemeinen sind Demo4j basierend auf Dom und Pull-Parsing basierend auf Sax. Es gibt eine andere Art, die ich vergessen habe

Übersicht:

Was ist XML?
eXtensible Markup Language (erweiterbare Auszeichnungssprache);

Gemeinsame Funktionen von XML:

1, verwendet als Konfigurationsdatei
2, Datenformat bei der Datenübertragung
3, Ressourcendatei in Android

Grundlegende Syntax von XML:

1. Die Anweisung muss in die erste Zeile geschrieben werden

<?xml version="1.0" encoding="utf-8"?>

    version : xml的版本号.目前只有1,0版本

    encoding: 编码格式

2. Es darf nur ein Root-Tag vorhanden sein

3 Jedes Tag muss geschlossen sein

4, kann nicht kreuzverschachtelt werden

in der Form:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#3F51B5</color>
     </resources>

5, CDATA-Bereich

    <![CDATA[

    将有特殊符号文本显示
    if( 3< 5 ){
       }

    ]]>

, z. B. mit „<“, „> im Dokument ;“ und andere spezielle Symbole müssen den CDATA-Bereich verwenden, sonst wird es nicht normal kompiliert

Die generierte b.xml-Datei ist:

public class WriteXml {    
public static void main(String[] args) throws Exception {        
// 创建xml解析工厂
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();        
        // 通过工厂创建序列化器(xml生成器)
        XmlSerializer ser = factory.newSerializer();        
        // 为序列化器指定输出流(将xml文件写到指定的某个文件中)
        ser.setOutput(new FileOutputStream("src/b.xml"), "utf-8");        
        //  开始写xml文件

        // 1.xml的声明---------- <?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; standalone=&#39;yes&#39; ?>
        ser.startDocument("utf-8", true);        
        // 2. 开始标签  ---------- <书库>
        ser.startTag(null, "书库");        
        for (
        int i = 0; i < 2; i++) {        
        //3.开始标签 ------------- <书>
            ser.startTag(null, "书");        
            // 4. 开始标签------------ <书名>
            ser.startTag(null, "书名");        
            //4.1为书名标签设置 属性--------- <书名 id = "1001">   
            ser.attribute(null, "id", "1001");        
            //4.2标签设置  文本------------  <书名 id = "1001" >百年孤独    
            ser.text("百年孤独");        
            // 5,结束标签 ------------  </书名>
            ser.endTag(null, "书名");        
            // 6.结束标签------------</书>   
            ser.endTag(null, "书");
         

        }        
        // 7.根标签 结束-----------</书库>
        ser.endTag(null, "书库");
        ser.endDocument();

    }
    }

Pull-Analyse
<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; standalone=&#39;yes&#39; ?>
    <书库>
        <书>
            <书名 id="1001">百年孤独</书名>
        </书>
        <书>
            <书名 id="1002">百年孤独</书名>
        </书>
    </书库>
1, verwenden Sie kxml2-2.3.0.jar und xmlpull_1_1_3_4c.jar für die Analyse

Wenn kein build.path vorhanden ist, wird der folgende Fehler gemeldet:

 public class XmlParserDemo {

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {        
    // 创建pull解析器工厂对象
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();        
        // 创建解析器对象
        ArrayList<Book> list = null;
        Book book = null;        
        // 获得解析器
        XmlPullParser parser = factory.newPullParser();        
        // 从指定文件中解析 出xml
        parser.setInput(new FileInputStream("src/b.xml"), "utf-8");        
        // 1 . 判断是否是根标签的结束标签
        while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {            
        switch (parser.getEventType()) {            
        case XmlPullParser.START_TAG: // 开始标签
                if (parser.getName().equalsIgnoreCase("书库")) { 
                // ------------<书库>
                    // 如果是 跟标签时,创建集合存储 对象
                    list = new ArrayList<Book>();
                } else if (parser.getName().equalsIgnoreCase("书")) { 
                // ----------<书>

                    // 当标签是对象时. 创建 对象
                    book = new Book();

                } else if (parser.getName().equalsIgnoreCase("书名")) {
                // ----------<书名>

                    // 获得当前标签中的 属性以及text.并存储到对象中
                    String id = parser.getAttributeValue(null, "id");
                    book.setId(id);
                    String name = parser.nextText();
                    book.setName(name);

                }                
                break;            
                case XmlPullParser.END_TAG: // 结束标签
                // 标签为对象的结束标签时,将对象存储到集合中 </书>
                if (parser.getName().equalsIgnoreCase("书")) { 
                // -------</书>
                                                            
                                                            
                    // 注意:当时</书名>结束标签时不用做处理
                    list.add(book);
                }                
                break;

            }

            parser.next();

        }        for (int i = 0; i < list.size(); i++) {
            System.out.println("---" + list.get(i));
        }

    }
    }

2. Der Rückgabewert der parser.getName()-Methode – der Tag-Name hat die Form:

Wenn der Parser analysiert, wird .parser auch in den Tag-Titeltext (text) verschoben. Text hat also keinen Tag-Namen ist null

Das obige ist der detaillierte Inhalt vonXML-Übersicht und Beispielcode für Pull-Parsing. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn