在Android中操作XML数据-读取与解析XML数据/生成与输出XML数据

XML,即可扩展标记语言(ExtensibleMarkup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。本课时对XML数据格式进行介绍。

创建一个新项目LearnTestXML,一个空白的Activity

创建Assets目录(manifest\new\Folder\Assets)

创建一个Language.xml文件到Assets目录

<?xml version="1.0" encoding="utf-8"?>
  <Languages cat="IT">
    <lan id="1">
        <name>Java语言</name>
        <ide>Eclipse编辑器</ide>
  
    </lan>
    <lan id="2">
        <name>Swift</name>
        <ide>Xcode</ide>
    </lan>
    <lan id="3">
        <name>c#</name>
        <ide>Visual Studio工作室</ide>
    </lan>
</Languages>

 

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tvText"
    android:hint="读取xml文件" />
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    TextView textView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        findViewById(R.id.btnWriteXML).setOnClickListener(this);
        findViewById(R.id.btnReadXML).setOnClickListener(this);
  
  
        textView= (TextView) findViewById(R.id.tvText);
  
    }
  
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnReadXML:
                goReadXML();
                break;
            case R.id.btnWriteXML:
                goWriteXML();
                break;
        }
  
    }
  
    private void goWriteXML() {
        try {
  
            DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder= builderFactory.newDocumentBuilder();
  
            Document newXml=builder.newDocument();
            Element languages=newXml.createElement("Languages");  //创建根元素
            languages.setAttribute("cat", "IT");  //设置根元素的属性
  
            Element lan1=newXml.createElement("lan");
            lan1.setAttribute("id", "1");
            Element name1=newXml.createElement("name");
            name1.setTextContent("Java语言");
            Element ide1=newXml.createElement("ide");
            ide1.setTextContent("Eclipse集成开发环境");
            lan1.appendChild(name1);
            lan1.appendChild(ide1);
            languages.appendChild(lan1);
  
            Element lan2=newXml.createElement("lan");
            lan2.setAttribute("id", "2");
            Element name2=newXml.createElement("name");
            name2.setTextContent("Swift语言");
            Element ide2=newXml.createElement("ide");
            ide2.setTextContent("XCode编辑器");
            lan2.appendChild(name2);
            lan2.appendChild(ide2);
            languages.appendChild(lan2);
  
            newXml.appendChild(languages);
  
            TransformerFactory transformerFactory=TransformerFactory.newInstance();
            Transformer transformer=transformerFactory.newTransformer();
            transformer.setOutputProperty("encoding","utf-8");
            StringWriter sw=new StringWriter();
            transformer.transform(new DOMSource(newXml),new StreamResult(sw));
  
            textView.setText(sw.toString());
  
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
  
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }
  
    private void goReadXML() {
        try {
  
            DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder= builderFactory.newDocumentBuilder();
            Document document=builder.parse(getAssets().open("Language.xml"));
            Element element=document.getDocumentElement();//获取文档的根元素
            NodeList list= element.getElementsByTagName("lan"); //获取根元素的子对象
            for(int i=0;i<list.getLength();i++){
                Element lan= (Element) list.item(i);
                textView.append(lan.getAttribute("id")+"\n");
                textView.append(lan.getElementsByTagName("name").item(0).getTextContent()+"\n");;
                textView.append(lan.getElementsByTagName("ide").item(0).getTextContent()+"\n");
            }
  
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
  
  
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值