풀 구문 분석을 위한 XML 개요 및 샘플 코드

黄舟
풀어 주다: 2017-03-18 17:41:29
원래의
1810명이 탐색했습니다.


XML 개요 및 Pull 구문 분석 세부 정보

 ONE Goal ,ONE Passion !
로그인 후 복사

가장 발전된 Android는 json이며 Xstream으로 xml을 구문 분석합니다. xml의 ​​수동 파싱은 거의 잊어버렸습니다. 일반적으로 가장 일반적인 것은 dom 기반의 데모4j이고, 제가 잊어버린 또 다른 종류가 있습니다.

개요:

XML이란 무엇입니까?
eXtensible Markup Language(확장 가능 마크업 언어);

XML의 공통 기능:

1 , 사용됨 구성 파일
2, 데이터 전송 중 데이터 형식
3, Android의 리소스 파일

XML의 기본 구문:

1. 명령문은 첫 번째 줄에 작성해야 합니다

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

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

    encoding: 编码格式
로그인 후 복사

2, 루트 태그는 하나만 있을 수 있습니다

3, 각 태그는 닫혀야 합니다

4, 아니요 교차 중첩

형식은

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#3F51B5</color>
     </resources>
로그인 후 복사

5, CDATA 영역

    <![CDATA[

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

    ]]>
로그인 후 복사

는 "<", ">"와 같은 특수 기호를 사용해야 합니다. 그렇지 않으면 정상적으로 컴파일될 수 없습니다.

XML 파일을 작성하려면

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

    }
    }
로그인 후 복사

가 생성합니다. 🎜>

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; standalone=&#39;yes&#39; ?>
    <书库>
        <书>
            <书名 id="1001">百年孤独</书名>
        </书>
        <书>
            <书名 id="1002">百年孤独</书名>
        </书>
    </书库>
로그인 후 복사

Pull 구문 분석 xmlpull_1_1_3_4c.jar 두 개의 jar이 구문 분석됩니다.

build.path가 없으면 다음 오류가 보고됩니다.

 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.parser.getName() 메서드의 반환 값 – 태그 이름

 org.xmlpull.v1.XmlPullParserException: caused by: org.xmlpull.v1.XmlPullParserException: 
 resource not found: /META-INF/services/org.xmlpull.v1.XmlPullParserFactory make sure that parser implementing XmlPull API is available
로그인 후 복사
형식입니다. 태그 제목 텍스트(text)로 이동합니다. 텍스트에 태그 이름이 없으므로 null입니다.

위 내용은 풀 구문 분석을 위한 XML 개요 및 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!