Maison > développement back-end > Tutoriel XML/RSS > Présentation XML et exemple de code pour l'analyse Pull

Présentation XML et exemple de code pour l'analyse Pull

黄舟
Libérer: 2017-03-18 17:41:29
original
1890 Les gens l'ont consulté


XML aperçu et détails de l'analyse Pull

 ONE Goal ,ONE Passion !
Copier après la connexion

Le Android le plus développé est json et l'analyse Xstream est. utilisé pour XML, et j'ai presque oublié l'analyse manuelle de XML. Généralement, les plus courantes sont demo4j basée sur dom, et l'analyse pull basée sur sax. Il y en a un autre que j'ai oublié

<🎜. > Présentation :

Qu'est-ce que XML ?

eXtensible Markup Language (langage de balisage extensible) ;

Fonctions communes de XML :

1, utilisé comme

fichier de configuration 2, format de données lors de la transmission des données
3, fichier de ressources sous Android

Syntaxe de base de XML :

1. La déclaration doit être écrite sur la première ligne

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

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

    encoding: 编码格式
Copier après la connexion
2. Il ne peut y avoir qu'une seule balise racine

3.

4, ne peut pas être imbriqué

sous la forme :

5, zone CDATA
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#3F51B5</color>
     </resources>
Copier après la connexion

, par exemple en utilisant "<", "> dans le document ;" et d'autres symboles spéciaux doivent utiliser la zone CDATA, sinon il ne sera pas compilé normalement
    <![CDATA[

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

    ]]>
Copier après la connexion

Pull pour écrire le fichier XML. 🎜>Le fichier b.xml généré est :

Analyse Pull
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();

    }
    }
Copier après la connexion
1, utilisez kxml2-2.3.0.jar et xmlpull_1_1_3_4c.jar deux pots pour l'analyse

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; standalone=&#39;yes&#39; ?>
    <书库>
        <书>
            <书名 id="1001">百年孤独</书名>
        </书>
        <书>
            <书名 id="1002">百年孤独</书名>
        </书>
    </书库>
Copier après la connexion
S'il n'y a pas de build.path, l'erreur suivante sera signalée :

2 La valeur de retour de la méthode parser.getName() – le nom de la balise <. 🎜>
 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));
        }

    }
    }
Copier après la connexion

est sous la forme : Lorsque l'analyseur analyse, .parser se déplacera également vers le texte du titre de la balise (texte). Et le texte n'a pas de nom de balise, donc il. est nul

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal