在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十六进制值 。ß,
实体引用( entity reference)的形式是&name;<小于,>大于等
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方法即可。
新闻热点
疑难解答