XML的读取和解析以及输出

来源:互联网 发布:苹果激活策略查询软件 编辑:程序博客网 时间:2024/05/16 18:44

XML的读取和解析以及输出

XML的简介

         XML即是Extensible Markup Language的缩写,是一种用于标记电子文件使之具有结构性的标记语言。XMLHTML的一个子集,并非是HTML的替代,二者具有相似性和区别。XML可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,具有以下特性:

1.    XML类似于HTML

2.    XML适合传输数据而非现实数据。

3.    XML的标签需要用户自定义

4.    XMLw3c的推荐标准

5.    XML具有自我描述性

HTML的区别:

1.    XML不是HTML的替代

2.    XMLHTML的设计目的不同,XML注重数据的内容和数据的传输,HTML注重数据的外观和现实数据。

 

XML的语法结构(摘自百度百科)

一、任何的起始标签都必须有一个结束标签。

二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条></百度百科词条>。

三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如这是一串百度百科中的样例字符串。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

四、所有的特性都必须有值。

五、所有的特性都必须在值的周围加上双引号。

 

XML的实例

<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>vs</ide>         </lan></Languages>


在XML中,元素可以包含其他元素,文本内容,或者二者的混合物。元素可以拥有属性

在此例中languages包含了元素和文本,本身也具有属性,lan中也是包含元素,和文本,本身也有属性,而例如name中则只包含文本。

 

 

输出XML格式的数据

                   以代码为例

                     try {                         DocumentBuilderFactorybuilderfactory=DocumentBuilderFactory.newInstance();                         DocumentBuilderbuilder=builderfactory.newDocumentBuilder();                            Documentdocument=builder.parse(getAssets().open("languages.xml"));                         Elementelement=document.getDocumentElement();                         NodeListlist=element.getElementsByTagName("lan");                        for(inti=0;i<list.getLength();i++){                                   Elementlan=(Element)list.item(i);                                   text.append(lan.getAttribute("id"+"\n"));                         text.append(lan.getElementsByTagName("name").item(0).getTextContent()+"\n");                         text.append(lan.getElementsByTagName("ide").item(0).getTextContent()+"\n");                         }                } catch (Exception e) {                         e.printStackTrace();                }


这段程序对应的XML文件

                            <?xmlversion="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>vs</ide>         </lan></Languages>


先通过文件操作流打开了对应的XML文件,将之写入一个list然后在for循环中,通过文本的对应的标签加入text中,然后在虚拟机中运行时,text可以显示。

 

 

创建XML格式的文件(以相同的内容的XML文件为例)

try{                                           DocumentBuilderFactorybuilderfactory=DocumentBuilderFactory.newInstance();                            DocumentBuilderbuilder=builderfactory.newDocumentBuilder();                            Documentnewxml=builder.newDocument();                            Elementlanguages=newxml.createElement("languages");                            languages.setAttribute("cat","it");                                                       //languages1create                            Elementlan1=newxml.createElement("lan");                            lan1.setAttribute("id","1");                            Elementname1=newxml.createElement("name");                            name1.setTextContent("java");                            Elementide1=newxml.createElement("ide");                            ide1.setTextContent("eclipse");                            lan1.appendChild(name1);                            lan1.appendChild(ide1);                            languages.appendChild(lan1);                                                       //languages2create                            Elementlan2=newxml.createElement("lan");                            lan2.setAttribute("id","2");                            Elementname2=newxml.createElement("name");                            name2.setTextContent("Swift");                            Elementide2=newxml.createElement("ide");                            ide2.setTextContent("XCode");                            lan2.appendChild(name1);                            lan2.appendChild(ide1);                            languages.appendChild(lan2);                                                       //languages3create                            Elementlan3=newxml.createElement("lan");                            lan3.setAttribute("id","3");                            Elementname3=newxml.createElement("name");                            name3.setTextContent("c#");                            Elementide3=newxml.createElement("ide");                            ide3.setTextContent("VisualStdio");                            lan3.appendChild(name3);                            lan3.appendChild(ide3);                            languages.appendChild(lan3);                                                       newxml.appendChild(languages);                                                       TransformerFactorytransformerFactory=TransformerFactory.newInstance();                            Transformertransformer=transformerFactory.newTransformer();                            transformer.setOutputProperty("encoding","utf-8");                            StringWritersw=new StringWriter();                            transformer.transform(newDOMSource(newxml), new StreamResult(sw));                                                       text.setText(sw.toString());             }                         catch(Exception e){                      e.printStackTrace();             }


其原理类似于JSON格式数据的创建

 

 

另付一个可以在线测试XML格式的网站:

http://json.parser.online.fr

0 0