标签:课堂 dom2 throws core sax 修改 就是 getchild htm
XML提供了一种比较简单的描述内容的方法,而且这种方法能表述列表、树等常见的数据结构,可扩展性好。XML使用纯文本方法书写,人们可以读懂内容,也可以自行修改里面的内容。XML是树形的结构,关于树,有非常非常多很成熟的算法进行描述、操作、生成、分析,使得XML描述的数据可以很方便的生成和处理。
同上题。
格式良好的XML文档需要满足:
(1)必须有XML文档的声明语句;
(2)必须有且仅有一个根元素;
(3)标签成对出现;
(4)标签名称大小写敏感;
(5)属性值用双引号;
(6)元素正确嵌套。
(1)没有xml文档声明,如:<?xml version="1.0" encoding="gbk" ?>
(2)没有根元素;
(3)属性值没有双引号,<prename endAge=20>朱重八</prename>;
(4)标签名称大小写敏感, <name startAge="20">朱元璋</Name>,起始标签和结束标签大小写一致;
<resume>
<prename endAge=20>朱重八</prename>
<name startAge="20">朱元璋</Name>
<dynasty>明朝</dynasty>
<gender>男</gender>
<preJob>要饭</preJob>
<preJob>和尚</preJob>
<job>皇帝</job>
</resume>
<wife>
<name>马大脚</name>
</wife>
<?xml version="1.0" encoding="gbk" ?><!--声明不是必须的。-->
<resume>
<prename endAge="20">朱重八</prename>
<name startAge="20">朱元璋</name>
<dynasty>明朝</dynasty>
<gender>男</gender>
<preJob>要饭</preJob>
<preJob>和尚</preJob>
<job>皇帝</job>
</resume>
“我叫高小七,今年18了,我喜欢如花姑娘,也喜欢我的宠物旺财”
<?xml version="1.0" encoding="gbk" ?>
<personalinfo>
<name >高小七</name>
<age>18</age>
<hobbies>如花姑娘</hobbies>
<hobbies>
<pet>旺财</pet>
</hobbies>
</ personalinfo>
(1)CDATA的作用:XML文档中的所有文本均会被解析器解析,只有CDATA区段中的文本会被解析器忽略。
(2)实例:
xml解析器通常会解析xml文档中的所有文本。
当某个xml元素被解析时,其标签之间的文本也会被解析,如:
<message>This text is also parsed</message>
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中,其中的 <name> 元素包含着另外的两个元素(first 和 last):
<name><first>Bill</first><last>Gates</last></name>
而解析器会把它分解为像这样的子元素:
<name>
<first>Bill</first>
<last>Gates</last>
< /name>
但是,在实际应用中有这样一种情形:“name”标签之间的内容不需要被解析成子元素,而是整体作为“name”标签的内容,也就是“name”标签的字符数据,这个时候,就需要加CDATA标记,如下:
<name>
<![CDATA[
<first>Bill</first>
<last>Gates</last>
]]>
< /name>
这样”name”之间的内容就不会被解析了(虽然它包含<,>等标签语法),而是全部当作字符(文本)数据来处理。CDATA表示“字符数据”(CharacterData)。
在xml技术里,我们可以编写一个文档来约束某一个xml文档的书写规范,如一个xml文档要包含哪些元素,元素与元素之间的嵌套关系,某些元素必须具备哪些属性等,这称为xml约束。
常用的xml约束技术有两种:dtd和schema。
dtd:document type definition, 文档类型定义。近几年来XML技术领域所使用的最广泛的一种模式。但是它有其局限性:不能完全满足XML自动化处理的要求,例如不能很好实现应用程序不同模块间的相互协调,缺乏对文档结构、属性、数据类型等约束的足够描述等等。所以W3C于2001年5月正式推荐XML Schema为XML 的标准模式。显然,W3C希望以XML Schema来作为XML模式描述语言的主流,并逐渐代替XML DTD。XML Schema与XML DTD相比到底有哪些优势呢?
DTD 的局限性
DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)
DTD数据类型有限(与数据库数据类型不一致)
DTD不可扩展
DTD不支持命名空间(命名冲突)
Schema的新特性
Schema基于XML语法
Schema可以用能处理XML文档的工具处理
Schema大大扩充了数据类型,可以自定义数据类型
Schema支持元素的继承
Schema支持属性组
Schema支持命名空间(命名冲突)
XSL(eXtensible Stylesheet Language)是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言。
DOM:
?基于XML树结构
?比较耗资源
?适用于多次访问XML
SAX:
?基于事件
?消耗资源小
?适用于数据量较大的XML
JDOM是一种解析XML的Java工具包。
JDOM和DOM的区别:
DOM适合于当今流行的各种语言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了为HTML和XML文档提供了一个可应用于不同平台的编程接口。W3C DOM的最新信息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。
DOM的设计为了适用于不同的语言,它保留了不同语言中非常相似的API。但是它并不适合于Java编程者的习惯。而JDOM作为一种轻量级API被制定,它最核心的要求是以Java为中心,只适合于Java语言,它遵循DOM的接口主要规则,除去了DOM中为了兼容各语言而与Java习惯的不同。
代码示例:
要处理的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>牧羊少年</title>
<price>9.6</price>
</book>
<book>
<title>钢铁是怎样炼成的</title>
<price>9.6</price>
</book>
<book>
<title>三国演义</title>
<price>38.9</price>
</book>
</books>
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
public class JDOMParse {
public static void main(String[] args) throws JDOMException, IOException {
//使用JDOM首先要指定使用什么解析器;
SAXBuilder sb=new SAXBuilder();
File file=new File("e:\\books.xml");
//得到Document,我们以后要进行的所有操作都是对这个Document操作的:这个//Document类是org.jdom2.Document;
Document document=sb.build(file);
//得到根元素;在JDOM中所有的节点都是一个org.jdom.Element类,当然他的子节点
//也是一个org.jdom.Element类;
Element root=document.getRootElement();
//得到元素(节点)的集合;这表示得到“books”元素的所在名称为“book”的元素,
//并把这些元素都放到一个List集合中;
List bookList=root.getChildren("book");
//遍历List集合;
for(int i=0;i<bookList.size();i++){
Element book=(Element)bookList.get(i);
//取得元素的子元素的值:
String title=book.getChildText("title");
String price=book.getChildText("price");
System.out.println("第"+(i+1)+"本书:"+title+""+price);
}
}
}
XPath(XML Path Language)即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
代码示例:
要处理的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>牧羊少年</title>
<price>9.6</price>
</book>
<book>
<title>钢铁是怎样炼成的</title>
<price>9.6</price>
</book>
<book>
<title>三国演义</title>
<price>38.9</price>
</book>
</books>
public class XPathTest {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException, XPathExpressionException {
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document document=db.parse("e:\\books.xml");
// 创建XPath对象;
XPath xPath=XPathFactory.newInstance().newXPath();
//获取根结点;
Node root=(Node)xPath.evaluate("//*", document,XPathConstants.NODE);
System.out.println(root);
System.out.println(root.getNodeName());
//获取子元素并打印;
NodeList nodeList=(NodeList)xPath.evaluate("/books/*", document, XPathConstants.NODESET);
for(int i=0;i<nodeList.getLength();i++){
System.out.println(nodeList.item(i).getNodeName());
}
//只获取元素名称为"title"的元素;
NodeList nodeList1=(NodeList)xPath.evaluate("//*[name()=‘title‘]", document, XPathConstants.NODESET);
for(int i=0;i<nodeList1.getLength();i++){
System.out.println(nodeList1.item(i).getNodeName()+""+nodeList1.item(i).getTextContent());
}
//获取含有子元素的元素;
NodeList nodeList2 = (NodeList) xPath.evaluate("//*[*]", document,XPathConstants.NODESET);
for (int i = 0; i < nodeList2.getLength(); i++) {
System.out.println(nodeList2.item(i).getNodeName());
}
//获取指定层级的元素;
NodeList nodeList3 = (NodeList) xPath.evaluate("/*/*/*", document,XPathConstants.NODESET);
for (int i = 0; i < nodeList3.getLength(); i++) {
System.out.println(nodeList3.item(i).getNodeName());
}
}
XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的东西。
注:以上代码只是简单实例,详细学习请参照API。
标签:课堂 dom2 throws core sax 修改 就是 getchild htm
原文地址:https://www.cnblogs.com/ren549047861/p/11294290.html