XML概述以及Pull解析的示例代码
时间:2022-02-24 10:30
做Android开发最多的都是json.而且解析xml都用Xstream,慢慢地xml的手动解析都快忘记了.一般最常见的还是基于dom的demo4j , 还有基于sax的pull解析.还有一种吧忘记了 XML是什么 ? 1,用作配置文件 1.声明 必须写在第一行 2,只能有一个根标签 3,每个标签都必须闭合 4,不能交叉嵌套 形如: 5,CDATA区 如在文档中使用”<”,”>”等特殊符号时要使用CDATA区,否者不能正常编译. 生成的b.xml文件为: 如果没有build.path会报下面的错误: 形如: 当parser解析时.parser也会移动到标签题文本(text)中.而text没有标签名所以为null. 以上就是XML概述以及Pull解析的示例代码的详细内容,更多请关注gxlsystem.com其它相关文章!XML概述以及Pull解析详解
ONE Goal ,ONE Passion !
概述:
eXtensible Markup Language(可扩展的标记语言);XML常见作用:
2,数据传输时数据格式
3,Android中资源文件XML的基本语法:
<?xml version="1.0" encoding="utf-8"?>
version : xml的版本号.目前只有1,0版本
encoding: 编码格式
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
</resources>
<![CDATA[
将有特殊符号文本显示
if( 3< 5 ){
}
]]>
Pull编写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='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">百年孤独</书名>
</书>
</书库>
Pull解析XMl:
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));
}
}
}
注意事项:
1,使用kxml2-2.3.0.jar和xmlpull_1_1_3_4c.jar两个jar进行解析.
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
2.parser.getName()方法的返回值–标签名
//返回null <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
//返回
书名,null,书名 <书名 id="1001">百年孤独</书名>
//返回
书名,null,书名 <书名 id="1002"></书名>