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