ONE Goal ,ONE Passion !
가장 발전된 Android는 json이며 Xstream으로 xml을 구문 분석합니다. xml의 수동 파싱은 거의 잊어버렸습니다. 일반적으로 가장 일반적인 것은 dom 기반의 데모4j이고, 제가 잊어버린 또 다른 종류가 있습니다.
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 ){ } ]]>
는 "6745434bf92a2979d589ede8e8e7bea9"와 같은 특수 기호를 사용해야 합니다. 그렇지 않으면 정상적으로 컴파일될 수 없습니다.
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(); } }
가 생성합니다. 🎜>
<?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)); } } }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 중국어 웹사이트의 기타 관련 기사를 참조하세요!