XML(可扩展标记语言)简介,以及用Java StAX进行读写

来源:互联网 发布:科比历年数据 编辑:程序博客网 时间:2024/05/29 07:16
 

1. XML 与 HTML 的区别:

 

XML 不是 HTML 的替代。

XML 和 HTML 为不同的目的而设计:

XML 被设计为传输和存储数据,其焦点是数据的内容。

HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

HTML中有许多没有关闭的标签,但是XML中的标签都是关闭的

 

2. XML 的元素可以包含子元素、属性以及文本内容。

我们保存的数据可以用子元素或者属性的方式来表示,例如:

表示方法一:

<note date="08/08/2008"><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note> 


表示方法二:

<note><date>08/08/2008</date><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note> 


表示方法三:

<note><date>  <day>08</day>  <month>08</month>  <year>2008</year></date><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>

 

因使用属性而引起的一些问题:

  • 属性无法包含多重的值(元素可以)
  • 属性无法描述树结构(元素可以)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

3. 形式良好的XML文档必须包含以下信息:

  • XML 文档必须有根元素
  • XML 文档必须有关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性必须加引号
<?xml version="1.0" encoding="ISO-8859-1"?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>


4. StAX示例:

用StAX写XML文档示例:

package XML;import java.io.File;import java.io.FileWriter;import java.io.IOException;import javax.xml.stream.XMLOutputFactory;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamWriter;public class XMLWriterTest {public void testWriter(){try{XMLOutputFactory outputFactory=XMLOutputFactory.newInstance();FileWriter output = new FileWriter(new File("/usr/local/workspace/aaa.xml"));XMLStreamWriter xmlWriter = outputFactory.createXMLStreamWriter(output);xmlWriter.writeStartDocument("UTF-8","1.0");xmlWriter.writeComment("This is the configuration file for online check memory cache");xmlWriter.writeStartElement("Memory");xmlWriter.writeAttribute("address", "10.197.32.159");xmlWriter.writeAttribute("port", "12345");xmlWriter.writeCData("fffff");xmlWriter.writeCharacters("eeeeee");xmlWriter.writeEndElement();xmlWriter.writeEndDocument();xmlWriter.flush();xmlWriter.close();} catch (XMLStreamException ex){} catch (IOException ex) {}}public static void main(String[] args){XMLWriterTest test = new XMLWriterTest();test.testWriter();}}

 

 

用StAX读XML文档示例:

package XML;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamConstants;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;public class XMLReaderTest {public void testWriter(){try{XMLInputFactory inputFactory = XMLInputFactory.newInstance();InputStream input = new FileInputStream(new File("/usr/local/workspace/aaa.xml"));XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(input);int event = xmlStreamReader.getEventType();while(true){switch(event){case XMLStreamConstants.START_DOCUMENT:System.out.println("Start document");break;case XMLStreamConstants.START_ELEMENT:System.out.println("Start Element: " + xmlStreamReader.getName()); for(int i = 0, n = xmlStreamReader.getAttributeCount(); i < n; ++i) System.out.println("Attribute: " + xmlStreamReader.getAttributeName(i)  + "=" + xmlStreamReader.getAttributeValue(i));  break; case XMLStreamConstants.END_ELEMENT: System.out.println("End Element:" + xmlStreamReader.getName()); break; case XMLStreamConstants.END_DOCUMENT: System.out.println("End Document."); break; }if (!xmlStreamReader.hasNext()) break; event = xmlStreamReader.next(); }xmlStreamReader.close();} catch (XMLStreamException ex){} catch (IOException ex) {} finally {}}public static void main(String[] args){XMLReaderTest test = new XMLReaderTest();test.testWriter();}}


其中,XMLStreamConstants的事件类型内容可以包括:

事件类型描述START_DOCUMENT一个文档的开始START_ELEMENT一个元素的开始ATTRIBUTE一个元素属性NAMESPACE一个命名空间声明CHARACTERS字符可以是文本,或是一个空格COMMENT一个注释SPACE可忽略的空格PROCESSING_INSTRUCTION处理指令DTD一个DTDENTITY_REFERENCE一个实体参考CDATACdata节END_ELEMENT结束元素END_DOCUMENT结束文档ENTITY_DECLARATION一个实体声明NOTATION_DECLARATION一个标志声明

 

原创粉丝点击