您的位置:首页 > 其它

web框架学习前复习——xml(1)

2016-07-30 11:00 375 查看
xml
xml声明(必须出现在文档的第一行)
示例:<?xml version="1.0" encoding="UTF-8"?>
version:属性。取值,1.0.当前使用的XML的版本
encoding:当前xml文件使用的编码。默认是UTF-8
standalone:属性说明文档是否独立,可不写
xml标签为自定义标签,由一个根标签嵌套子标签。不可交叉嵌套与html相同。
标签的写法有两种(与html一致)


包含标签主体:<mytag>some content</mytag>
不含标签主体:<mytag/>


CDATA是Character Data的缩写。作用:把标签当做普通文本内容;


<![CDATA[
<itcast>www.itcast.cn</itcast>//此时被当做文本而非标签语言
]]>


编写DTD的方式有两种一种是直接写在xml文档中,如:


<?xml version=”1.0” encoding=”gbk”?>
<!DOCTYPE 书架(根元素)[
<!ELEMENT 书架 (书+)>//根元素包含的子元素书最少一个
<!ELEMENT 书 (书名,作者,售价)>//子元素必须包含的子标签
<!ELEMENT 书名 (#PCDATA)>//PCDATA表示元素的主体内容为普通文本
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>


第二种方式为外部引入。dtd作为单独的文件存在。文件扩展名.dtd,文件必须用UTF-8编码保存到磁盘上。引入方式为:


//dtd文件在本地:
<!DOCTYPE 根元素 SYSTEM  “dtd文件的地址”>
//dtd文件在外地(网上):
<!DOCTYPE 根元素 PUBLIC “dtd的名称” “dtd的路径”>
//示例:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE TVSCHEDULE SYSTEM "tet.dtd">
<TVSCHEDULE NAME="CCTV">
<CHANNEL CHAN="zh">
<BANNER>文本</BANNER>
<DAY>
<DATE>文本</DATE>
<HOLIDAY>文本</HOLIDAY>
</DAY>
<DAY>
<DATE>文本</DATE>
<PROGRAMSLOT>
<TIME>文本</TIME>
<TITLE>文本</TITLE>
<DESCRIPTION>文本</DESCRIPTION>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>


JAXP对xml文件进行DOM方式的解析

//xml文本
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<State Code="37" Name="山东" description="省会">
<City>
<Name>济南</Name>
<Region>历下区</Region>
</City>
<City>青岛</City>
<City>威海</City>
<City>泰安</City>
</State>


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JaxpDemo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//得到创建解析器的工厂:DocumentBuilderFactory
DocumentBuilder builder = factory.newDocumentBuilder();//通过工厂得到解析器:DocumentBuilder
Document document = builder.parse("xml文件路径");//加载xml文件:得到了Document对象
}
public static void test1(Document document){//得到某个具体的节点内容
NodeList nl = document.getElementsByTagName("City");//得到所有的City元素,
Node node = nl.item(2);//索引从0开始
System.out.println(node.getTextContent());//打印获得节点的主体内容
}
public static void test2(Document document){//遍历所有元素节点。
Node rootNode = document.getElementsByTagName("State").item(0);
treewalk(rootNode);
}
public static void treewalk(Node node){//递归
if(node.getNodeType()==Node.ELEMENT_NODE){//是一个元素节点
System.out.println(node.getNodeName());//打印元素的名称
}
NodeList nl = node.getChildNodes();//看看他有没有孩子
for(int i=0;i<nl.getLength();i++){
Node n = nl.item(i);
treewalk(n);//递归
}
}
public static void test3(Document document) throws Exception{//修改某个元素节点的主体内容
Node secondCityNode = document.getElementsByTagName("City").item(1);//找到第2个City元素
secondCityNode.setTextContent("威海");//设置主体内容为:威海
//把内存中的Document写到xml文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
}
public static void test4(Document document) throws Exception{//向指定元素节点中增加子元素节
Element e = document.createElement("City");//<City></City>//创建新元素
e.setTextContent("烟台");//<City>烟台</City>
Node rootNode = document.getElementsByTagName("State").item(0);
rootNode.appendChild(e);//把新元素添加到State最后
//把内存中的Document写到xml文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
}
public static void test5(Document document) throws Exception{//向指定元素节点上增加同级元素节点
Element e = document.createElement("City");//创建新元素
e.setTextContent("青岛");
//调用inertBefore插入新节点:必须由父节点来调用
Node secondNode = document.getElementsByTagName("City").item(1);
secondNode.getParentNode().insertBefore(e, secondNode);
//把内存中的Document写到xml文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
}
public static void test6(Document document) throws Exception{//删除指定元素节点
Node ytNode = document.getElementsByTagName("City").item(4);//得到烟台节点
ytNode.getParentNode().removeChild(ytNode);//用父节点删除
//把内存中的Document写到xml文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
}
public static void test7(Document document) throws Exception{//操作XML文件属性
Node stateNode = document.getElementsByTagName("State").item(0);//看成元素
if(stateNode.getNodeType()==Node.ELEMENT_NODE){
Element e = (Element)stateNode;
System.out.println(e.getAttribute("Name"));
}
}
public static void test8(Document document) throws Exception{//8、添加属性
Node stateNode = document.getElementsByTagName("State").item(0);//看成元素
if(stateNode.getNodeType()==Node.ELEMENT_NODE){
Element e = (Element)stateNode;
e.setAttribute("description", "省会");
}
//把内存中的Document写到xml文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml