XML
XML和HTML其实是源自同一个先辈:SGML XML比属性文件Properties的优势在于,结构层次清晰,不限于单一的平面层次结构(键值对,键还是唯一的)。
XML文档结构: 文档头: <?xml version="1.0"?> 或者<?xml version="1.0" encoding="UTF-8"?>
之后通常是文档类型定义(Document Type Definition,DTD)例如:(非必需品) <!DOCTYPE configuration
然后是元素,根元素和子元素,通常希望 文本有 标签包含。 并且XML中的元素可以使用属性,例如: <font name="Helvetica" size="36" /> 但是还有另外的: <font> <name>Helvetica</name> <size>36</size> </font> 属性的灵活性要差很多,例如要给属性添加一个单位,那么要带入到属性值里面去 <font name="Helvetica" size="36 pt" /> 而
<font> <name> Helvetica</name> <size unit="pt">36</size> </font> 别人的经验之谈,属性只应该用来修改值的解释,而不是用来指定值。所以当纠结于是设置属性,还是对某个值进行解释,我们 所以我们看到的,基本都是以元素的形式出现的……
解析XML文档 要处理XML文档,就要先解析(parse)它。解析器是这样一个程序,它读入一个文件,确认这个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素。Java提供了两种XML解析器: 文档对象模型(Document Object Model,DOM)解析器这样的树形解析器(tree parser),它们在读入的XML文档转换成树结构。 XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser)。它们在读入XML文档时生成相应的事件。
DOM解析器可能更容易一些,但是注意,当以要处理很长的文档的时候,用它生成树结构将会消耗大量内存; 或者如果你只是对于某些元素感兴趣,而不关心它们的上下文,那么在这些情况下你应该考虑使用流机制解析器。
DOM解析器的接口已经被W3C标准化了,(JDK中包含了自己的DOM解析器,DocumentBuilderFactory) DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); 当我们读入某个文档时 File f = …… Document doc = builder.parse( f ) { url、in(输入流都行) }
然后通过调用 getDocumentElement 方法来启动对文档内容进行分析,返回根元素: Element root = doc.getDocumentElement(); root.getTagName()返回元素的标签名; 获得子元素,使用getChildNodes()方法: NodeList children = root.getChildNodes(); …… Node child = children.item(i) ……
有可能空白字符也会解析进去,可以用DTD来剔除,也可以程序剔除。
用到的API:
如果要指定文档结构,可以提供一个文档类型定义(DTD)或一个XML Schema 定义 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |