首页 > 学院 > 开发设计 > 正文

简单了解一下xml

2019-11-14 09:08:16
字体:
来源:转载
供稿:网友
HTML和xml两者之间的区别。与HTML不同, XML是大小写敏感的。例如, <H1>和<h1>是不同的XML标签。在HTML中,如果从上下文可以分清哪里是段落或列表项的结尾,那么结束标签(如</p>或</li>)就可以省略,而在XML中结束标签绝对不能省略。在XML中,只有一个标签而没有相对应的结束标签的元素必须以/结尾,比如<imgsrc="coffeecup.png"/>。这样,解析器就知道不需要查找</img>标签了。在XML中,属性值必须用引号括起来。在HTML中,引号是可有可无的。例如, <appletcode="MyApplet.class" width=300 height=300>对HTML来说是合法的,但是对XML来说则是不合法的。在XML中,必须使用引号,比如, width="300"。

在HTML中,属性名可以没有值。例如, <input type="radio" name="language"value="java" checked>。 在 XML中 , 所 有 属 性 必 须 都 有 属 性 值 。 比 如 checked="true"或checked="checked"。

xml文档的结构

严格说来,文档头是可有可无的,但是强烈推荐你使用文档头。

<?xml version="1.0"?>或<?xml version="1.0" encoding="UTF-8"?>文档头之后通常是文档类型定义(Document Type Definition,DTD),文档类型定义是确保文档正确的一个重要机制,但是这不是必需的 。

<?DOCTYPE ......>最后,XML文档的正文包含根元素,根元素包含其他一些元素 。元素的属性只应该在修改值的解释时使用,而不是在指定值时使用。

元素和文本是XML文档“主要的支撑要素”,以下是你会遇到的其他一些标记的说明:字符引用( character reference)的形式是&#十进制值;或&#x十六进制值 。&#223,&#xD

实体引用( entity reference)的形式是&name;&lt小于,&gt大于等

CDATA部分(CDATA Section)用<![CDATA[和]]>来限定其界限。它们是字符数据的一种特殊形式。你可以使用它们来包含那些含有<、>、 &之类字符的字符串,而不必将它们解释为标记处理指令( PRocessing instruction)是那些专门在处理XML文档的应用程序中使用的指令,它们将用<?和?>来限定其界限注释( comment)用<!-和-->限定其界限解析XML

Java库提供了两种XML解析器:像文档对象模型( Document Object Model, DOM)解析器这样的树型解析器(tree parser),它们将读入的XML文档转换成树构。像用于XML的简单API(Simple API for XML, SAX)解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生成相应的事件。要读入一个XML文档,首先需要一个DocumentBuilder对象,你可以从DocumentBuilderFactory中得到这个对象

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder  db = dbf.newDocumentBuilder();
Document document = db.parse(xxx);xxx可以是文件,流等调用getDocumentElement方法可以返回root元素。getTagName方法可以返回元素的标签名。如果要得到该元素的子元素(可以是子元素、文本、注释或其他节点),请使用getChildNodes方法。这个方法返回一个类型为NodeList的集合。这个类型在标准的Java集合类创建之前就建立了,它有一个与众不同的访问协议。item方法将得到指定索引号的项。getLength方法则提供了项的总数 。

检索到它们包含的文本字符串。这些文本字符串本身都包含在Text类型的子节点中。既然知道了这些Text节点是惟一的子元素,就可以用getFirstChild方法而不用再遍历一个NodeList。然后可以用getData方法检索存储在Text节点中的字符串。也可以用getLastChild方法得到最后一项子元素,用getNextSibling得到下一个兄弟节点 。如果要枚举节点的属性,请调用getAttributes方法。它返回一个NamedNodeMap对象,其中包含了描述属性的节点对象。可以用和遍历NodeList一样的办法在NamedNodeMap中遍历各子节点。调用getNodeName和getNodeValue方法可以得到属性名和属性值。验证XML

XML解析器的一个很大的好处就是它能自动检验某个文档结构是否正确。如果要规范文档结构,可以提供一个文档类型定义( DTD)或一个XML Schema定义。DTD或schema包含了用于解释文档是如何构成的规则。这些规则规范了每个元素的合法子元素和属性 。太烦了,具体内容不学了,用到再说吧。

使用XPath定位信息

如果要定位某个XML文档中的一段特定信息,那么,通过遍历DOM树的众多节点来进行查找显得有些麻烦。XPath语言使得访问树节点变得很容易。XPath可以描述XML文档中的一组节点,例如,下面的XPath:/xxx/row描述了根元素xxx的子元素中所有的row元素。可以用[]操作符来选择特定元素:/xxx/row[1]这表示的是第一行(索引号从1开始)。使用@操作符可以得到属性值。 /xxx/row[1]/@href可以得到href的值Java SE 5.0增加了一个API来计算XPath表达式,需要先从XPathFactory创建一个XPath对象 。

XPathFactory pathFactory = XPathFactory.newInstance();XPath xPath=pathFactory.newXPath(); 然后,调用evaluate方法来计算XPath表达式:
XPath xPath=pathFactory.newXPath(); String name = xPath.evaluate("/xxx/row", db.parse(new File("")));这种形式的evaluate方法将返回一个字符串。这很适合用来检索文本,比如前面的例子中的username节点中的文本 。

String evaluate(String expression, Object startingPoint)从给定的起点计算表达式。起点可以是一个节点或节点列表。如果结果是一个节点或节点集,则返回的字符串包含所有文本节点子元素的数据。Object evaluate(String expression, Object startingPoint, QName resultType)从给定的起点计算表达式。起点可以是一个节点或节点列表。resultType是XPathConstants类的常量STRING、 NODE、 NODESET、 NUMBER或BOOLEAN之一。返回值是String、 Node、 NodeList、 Number或Boolean。生成XML文档

你可以直接通过一系列print调用,打印出各元素、属性和文本内容,来编写XML文件,但这并不是一个好主意。一个比较好的方法是用文档的内容构建一棵DOM树,然后再写出该树的所有内容。要建立一棵DOM树,你可以从一个空的文档开始。通过调用DocumentBuilder类的newDocument方法可以得到一个空文档。使用Document类的createElement方法可以构建文档里的元素 。使用createTextNode方法可以构建文本节点 。

doc.appendChild(xxx);xxx.appendChild(aaa);aaa.appendChild(bbb);//添加节点可能还需要设置元素属性,这只需调用Element类的setAttribute方法即可。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表