XML的读取和解析以及输出

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

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念