Android 使用原始xml资源

来源:互联网 发布:深圳软件开发工资水平 编辑:程序博客网 时间:2024/05/16 19:42

原始XML资源一般保存在/res/xml/路径下。

XML文件中访问语法格式:

@[<package_name>:]xml/file_name

Java代码中访问语法格式:

[<package_name>.]R.xml.<file_name>

在JAVA程序中获取实际的XML文档,可以通过Resources的如下两个方法来实现:

XmlResourceParser getXml(int id):获取XML文档,并使用一个XmlPullParser来解析该XML文档,该方法返回一个解析器对象(XmlResourceParser是XmlPullParser的子类。

InputStream openRawResource(int id):获取XML文档对应的输入流。

大部分时候,我们可以直接调用getXml(int id)方法来获取XML文档,并对该文档进行解析,Android默认使用内置的Pull解析器来解析XML文件。


除了使用Pull解析之外,Java开发者还可以使用DOM 或 SAX 对XML文档进行解析。Pull解析方式类似SAX解析,它们都采用事件驱动的方式来进行解析。当Pull解析器开始解析之后,开发者可以不断地调用Pull解析器的next()方法获取下一个解析事件(开始文档、结束文档、开始标签、结束标签等),当处于某个元素处时,可调用XmlPullParser的

getAttributeValue()方法来获取该元素的属性值,也可以调用XmlPullParser的nextText()方法来获取文本节点的值。


<?xml version="1.0" encoding="utf-8"?><books xmlns:android="http://schemas.android.com/apk/res/android">    <book price="109.0" 出版日期="2008年">疯狂Java讲义</book>    <book price="108.0" 出版日期="2009">轻量级Java EE</book>    <book price="79.0"  出版日期="2009">Ajax 讲义</book></books>

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="shortcut.song.com.myapplication.XmlParserDemo">    <Button        android:id="@+id/start_xml_btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Start-XML"        />    <TextView        android:id="@+id/xml_text_show"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

package shortcut.song.com.myapplication;import android.content.res.XmlResourceParser;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;public class XmlParserDemo extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_xml_parser_demo);        Button btn = (Button)findViewById(R.id.start_xml_btn);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                XmlResourceParser xrp = getResources().getXml(R.xml.books);                try{                    StringBuilder sb = new StringBuilder("");                    while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT)                    {                        if ( xrp.getEventType() == XmlResourceParser.START_TAG )                        {                            String tagName = xrp.getName();                            if(tagName.equals("book")){                                String bookName = xrp.getAttributeValue(null, "price");                                sb.append("价格:");                                sb.append(bookName);                                String bookPrice =  xrp.getAttributeName(1);                                sb.append(bookPrice);                                sb.append("书名");                                sb.append(xrp.nextText());                            }                            sb.append("\n");                        }                        xrp.next();                    }                    TextView tv = (TextView)findViewById(R.id.xml_text_show);                    tv.setText(sb.toString());                }catch (XmlPullParserException e){                    e.printStackTrace();                }catch (IOException e){                    e.printStackTrace();                }            }        });    }}





原创粉丝点击