简单了解一下xml

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 DefinitionDTD),文档类型定义是确保文档正确的一个重要机制,但是这不是必需的 。

<?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的简单APISimple 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中遍历各子节点。调用getNodeNamegetNodeValue方法可以得到属性名和属性值。

验证XML

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


使用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 方法即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值