XML基础(一)
所有的XML文件都由前导区和数据区组成。
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<?xml-stylesheet type="text/css" href="adress.css?">
<addresslist>
<linkman>
<name>张三</name>
<id>012</id>
<tel>1542454544</tel>
</linkman>
</addresslist>
其中
<?xml version="1.0" encoding="GB2312" standalone="no"?>
就是前导区,这三个属性必须按顺序写,否则将出错.
数据区要求必须有一个根元素,一个根元素下可存放多个子元素,但是要求每一个元素必须完结,每一个标记都是区分大小写的。
address.css文件:
name
{
display:block;
color:blue;
font-size:20pt;
font-weight:bold;
}
id,tel
{
font-style:italic;
font-size:14pt;
}
在XML中的特殊字符显示:
& ------ &
< ------ <
> ------ >
" ------ "
' ------ '
此外,XMl语言中提供了CDATA标记来表示文件数据,当XML解析器处理到CDATA标记时,不会解析,只是原封不动将数据传递给应用程序,结构:
<![CDATA[
不解析,直接显示。可以当注释用
]]>
XML 解析,读取结点
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document doc = null;
try {
doc = builder.parse("src/main/link.xml");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// NodeList nodeList = doc.getElementsByTagName("name");
//输出nodelist中第一个子节点中文本节点的内容
// String content = nodeList.item(1).getFirstChild().getNodeValue();
// System.out.println(content);
NodeList nodeList = doc.getElementsByTagName("linkman");
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element)nodeList.item(i);
String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
System.out.println("姓名:" + name);
String tel = e.getElementsByTagName("tel").item(0).getFirstChild().getNodeValue();
System.out.println("电话:" + tel);
}
生成XML文件
public static void main(String[] args){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document doc = null;
doc = builder.newDocument();
//建立各个操作结点
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name = doc.createElement("name");
Element email = doc.createElement("email");
//设置结点的文本内容,即为每一个结点添加文本节点
name.appendChild(doc.createTextNode("李慧"));
email.appendChild(doc.createTextNode("h**i@mail.dlut.edu.cn"));
//设置结点关系
linkman.appendChild(name);
linkman.appendChild(email);
addresslist.appendChild(linkman);
doc.appendChild(addresslist);
//输出文档到文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = null;
try {
t = tf.newTransformer();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}
t.setOutputProperty(OutputKeys.ENCODING, "GBK");//设置编码
DOMSource source = new DOMSource(doc); //设置文档
StreamResult result = new StreamResult(new File("e:" + File.separator + "haha.xml"));
try {
t.transform(source, result);
} catch (TransformerException e) {
e.printStackTrace();
}
}