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(); } } } |