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 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 | 一个DTD |
ENTITY_REFERENCE | 一个实体参考 |
CDATA | Cdata节 |
END_ELEMENT | 结束元素 |
END_DOCUMENT | 结束文档 |
ENTITY_DECLARATION | 一个实体声明 |
NOTATION_DECLARATION | 一个标志声明 |