您好,登錄后才能下訂單哦!
小編給大家分享一下XML概述以及Pull解析的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
ONE Goal ,ONE Passion !
做Android開發最多的都是json.而且解析xml都用Xstream,慢慢地xml的手動解析都快忘記了.一般最常見的還是基于dom的demo4j , 還有基于sax的pull解析.還有一種吧忘記了
XML是什么 ?
eXtensible Markup Language(可擴展的標記語言);
1,用作配置文件
2,數據傳輸時數據格式
3,Android中資源文件
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 ){ } ]]>
如在文檔中使用”<”,”>”等特殊符號時要使用CDATA區,否者不能正常編譯.
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='1.0' encoding='utf-8' standalone='yes' ?> 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(); } }
生成的b.xml文件為:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <書庫> <書> <書名 id="1001">百年孤獨</書名> </書> <書> <書名 id="1002">百年孤獨</書名> </書> </書庫>
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)); } } }
如果沒有build.path會報下面的錯誤:
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
形如:
//返回null <?xml version='1.0' encoding='utf-8' standalone='yes' ?> //返回 書名,null,書名 <書名 id="1001">百年孤獨</書名> //返回 書名,null,書名 <書名 id="1002"></書名>
當parser解析時.parser也會移動到標簽題文本(text)中.而text沒有標簽名所以為null.
以上是“XML概述以及Pull解析的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。