-
XML文档结构
- XML声明
<?xml version="1.0" encoding="UTF-8"?>
表示XML声明,用以标明该文件是一个XML文档。XML文档总是以XML声明开始,他定义了XML的版本和所使用的编码等信息。- version:文档符合XML 1.0规范
- encoding:文档字符编码,默认为“UTF-8”
- 标签
- 在XML中用<>括起来的各种标签来标记数据,标签成对使用来界定字符数据。
<元素名>
是开始标签,</元素名>
是结束标签,中间是标签的内容。
- 在XML中用<>括起来的各种标签来标记数据,标签成对使用来界定字符数据。
- 根元素
- 每个XML文档必须有且仅有一个根元素。
- 根元素是一个完全包括文档中其他所有元素的元素。
- 根元素的起始标签要放在所有其他元素的起始标签之前。
- 根元素的结束标签要放在所有其他元素的结束标签之后。
- 元素
- XML文档的主要部分是元素,元素由开始标签、元素内容和结束标签组成。元素内容可以包含子元素、字符数据等。
- 名称中可以包含字母、数字或者其他的字符。
- 名称不能以数字或者标点符号开始。
- 名称不能以字符“xml”(或者XML、Xml)开始。
- 名称中不能还有空格。
- 属性
- <元素名 属性名=“属性值”>
- 一个元素可以有多个属性,多个属性之间用空格隔开。
- 属性值中不能直接包含<、"、&。
- 属性可以加在任何一个元素的起始标签上,但不能加在结束标签上。
- XML中的特殊字符的处理
- 对特殊字符进行转义,使用预定义实体代替特殊字符。
实体名称 字符 <
< >
> &
& "
" '
’ - 使用CDATA节处理。 - `<![CDATA[ 要显示的字符 ]]>`
- XML中的注释
<!-- 注释内容 -->
- 格式良好的XML文档
- 必须有XML声明语句。
- 必须有且仅有一个根元素。
- 标签大小写敏感。
- 属性值用双引号。
- 标签成对。
- 元素正确嵌套。
- XML声明
-
使用DOM读取XML数据
-
- Document对象
- getElementsByTagName(String name):返回一个NodeList对象,它包含了所有给定标签名称的标签。
- getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的对象。
-
- NodeList对象
- getLength():返回列表的长度。
- item(int index):返回指定位置的Node对象。
-
- Node对象
- getChildNodes():包含此节点的所有子节点的NodeList。
- getFirstChild():如果节点存在子节点,则返回第一个子节点。
- getLastChild():如果节点存在子节点,则返回最后一个子节点。
- getNextSibling():返回在DOM树中这个节点的下一个兄弟节点。
- getPreviousSibling():返回在DOM树中这个节点的上一个兄弟节点。
- getNodeName():返回节点的名称。
- getNodeValue():返回节点的值。
- getNodeType():返回节点的类型。
-
- Element对象
- getAttribute(String attributename):返回标签中给定属性名称的属性的值。
- getElementsByTagName(String name):返回居右给定标记名称的所有后代Elements的NodeList。
- 注意: XML文档中的空白符也会被作为对象映射到DOM树中。因此,直接调用Node对象的getChildNodes()方法有时候会有问题。解决方法:
- 使用Element的getElementsByTagName(String name)。
- 调用Node的getChildNodes()方法得到NodeList对象。每次通过item()方法提取Node对象后判断
node.getNodeType() == Node.ELEMENT_NODE
,即判断是否是元素点。
-
-
使用DOM4J解析XML
-
1)-官网下载DOM4J相应的包加入工程。
-
2)-Document对象相关
- 读取XML文件,获得document对象。
SAXReader reader = new SAXReader();
Document document = reader.read(new File("xml文件名.xml"));
- 读取XML文件,获得document对象。
-
3)-节点相关
- (1)获取文档的根元素。
Element rootElm = document.getRootElement();
- (2)取得某节点的单个子节点。
Element memberElm = rootElm.element("节点名");
- (3)取得节点的文字。
String text = memberElm.getText();
- 也可以用:
String text = rootElm.elementText("节点名");
- (4)取得某节点名为固定的所有子节点并进行遍历。
List nodes = rootElm.elements("节点名"); for(Iterator it = nodes.iterator();it.hasNext();){ Element elm = (Element) it.next(); }
- (5)对某节点下的所有子节点进行遍历。
for(Iterator it = rootElm.elementIterator();it.hasNext();){ Element elm = (Element) it.next(); }
- (6)在某节点下添加子节点。
Element ageElm = newMemberElm.addElement("age");
- (7)设置节点文字。
ageElm.setText("设置的文字");
- (8)取得节点的文字。
待删除的父节点.remove(待删除的节点);
- (1)获取文档的根元素。
-
4)-属性相关
- (1)取得某节点下的某属性。
Attribute attribute = rootElm.attribute("属性名");
- (2)取得属性的文字。
String text = attribute.getText();
- 也可以用:
String text = rootElm.element("节点名").attributeValue("属性名");
- (3)遍历某节点的所有属性。
for(Iterator it = rootElm.attributeIterator();it.hasNext();){ Attribute attribute =(Attribute) it.next(); String text = attribute.getText(); }
- (4)设置某节点的属性和文字。
newMemberElm.addAttribute("属性名","属性值");
- (5)设置属性的文字。
attribute.setText("文字");
- (6)删除某属性。
rootElm.remove(attribute);
- (1)取得某节点下的某属性。
-
5)-将文档写入XML文件
- 文档中全为英文,不设置编码格式,直接写入。
XMLWriter writer = new XMLWriter(new FileWriter("文件名.xml")); writer.write(document); writer.close();
- 文档中含有中文,设置编码格式再写入。
OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK");//指定XML编码 XMLWriter writer = new XMLWriter(new FileWriter("文件名.xml"),format); writer.write(document); writer.close();
-
JAVA读写XML
最新推荐文章于 2024-10-25 10:20:57 发布