xml에는 일반적으로 사용되는 두 가지 유형이 있습니다.파싱 기술: dom 구문 분석 및 sax 구문 분석.
dom: (문서 객체 모델, 즉, 문서 객체 모델 )은W3C 조직에서는 XML을 처리하는 방법을 권장합니다.
sax: (Simple API for XML)은 공식 표준은 아니지만 XML커뮤니티의 사실상 표준이며 거의 모든 XML 파서가 이를 지원합니다.
Jaxp는JavaXML 프로그래밍을 위한 개발 패키지로, javax.xml, org로 구성됩니다. w3c.dom , org.xml.sax 패키지와 해당 하위 패키지로 구성됩니다.
javax.xml.parsers 패키지에는 프로그래머가 이러한 팩토리 클래스를 호출하면 을 얻을 수 있는 여러 팩토리 클래스가 정의되어 있습니다. xml 문서를 파싱한 DOM 또는 SAX 파서 객체.
DOM), 예 W3C 조직에서 권장하는 확장 가능한 마크업 언어를 처리하기 위한 표준 프로그래밍 인터페이스입니다. XML DOM 은 모든 XML 요소의 객체와 속성은 물론 이에 액세스하는 메서드(인터페이스)를 정의합니다.
개략도
DOM
파서는 XML 문서를 파싱할 때 문서의 모든 요소를 개별 노드객체(노드).
dom에서는 노드 간의 관계는 다음과 같습니다. 1
,은 하나의 노드에 위치합니다. 노드 노드는 노드 (부모)2
의 상위 노드입니다.노드 아래의 노드는 노드의 하위 노드(자식)입니다. ) 3, 같은 수준에 있고 같은 상위 노드를 가진 노드는 형제 노드입니다(sibling) 4 ,노드의 다음 단계에 설정된 노드는 노드 자손(descendant) 5, 부모, 조부모 노드 및 그 위에 있는 모든 노드입니다. 노드는 노드 (조상) Node 객체의 조상입니다. 개발자가 특정 Node 유형을 얻으면 Node 노드를 해당 노드로 변환할 수 있습니다. node 객체 (Node의 하위 클래스 객체 )를 사용하여 고유한 메서드를 쉽게 호출할 수 있습니다. (API 문서 참조) Node 객체는 상위 노드 또는 하위 노드를 가져오는 해당 메서드를 제공합니다. 이러한 방법을 통해 프로그래머는 XML 문서 전체의 내용을 읽거나, XML 문서. PS: 하위 인터페이스 요소에 더 많은 기능이 있습니다. Node 객체
DOM 파서Jaxp
에서 가져오기 🎜 >1,
DocumentBuilderFactory.newInstance() 메서드를 호출하여 DOM 파서의 팩토리를 만듭니다. 2
,DocumentBuilderFactory 객체의 newDocumentBuilder() 메소드를 호출하여 DOMParser 개체,는 DocumentBuilder의 개체입니다. 3
,DocumentBuilder 객체의 parse() 메서드 구문 분석 호출 XML 문서에서 전체 문서를 나타내는 Document 개체를 가져옵니다. 4
,Document 객체와 일부 관련 클래스 및 메소드를 통해 XML 운영할 문서입니다.
업데이트된
XML Transformer 클래스는 XML 파일을 나타내는 Document 객체를 특정 형식으로 변환하는 데 사용됩니다. 예를 들어 출력의 경우 xml 파일에 스타일 시트를 적용하고 html 문서로 변환합니다. 물론 이 개체를 사용하면 Document 개체를 XML 파일로 다시 작성할 수도 있습니다. Transformer 클래스는 소스와 대상을 전달받는 transform 메서드를 통해 변환 작업을 완료합니다. 변환할 객체를 다음을 통해 연결할 수 있습니다: javax.xml.transform.dom.DOMSource 클래스, javax.xml.transform.stream.StreamResult 객체를 사용하여 데이터의 대상을 나타냅니다. Transformer 객체는 TransformerFactory를 통해 얻습니다. 사례: XML5.xml 위 내용은 XML 프로그래밍-DOM 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요! <?xml version="1.0" encoding="UTF-8" standalone="no"?><班级 班次="1班" 编号="C1">
<学生 地址="湖南" 学号="n1" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1">
<名字>张三</名字>
<年龄>20</年龄>
<介绍>不错</介绍>
</学生>
<学生 学号="n2" 性别="女" 授课方式="面授" 朋友="n1 n3" 班级编号="C1">
<名字>李四</名字>
<年龄>18</年龄>
<介绍>很好</介绍>
</学生>
<学生 学号="n3" 性别="男" 授课方式="面授" 朋友="n2" 班级编号="C1">
<名字>王五</名字>
<年龄>22</年龄>
<介绍>非常好</介绍>
</学生>
<学生 性别="男">
<名字>小明</名字>
<年龄>30</年龄>
<介绍>好</介绍>
</学生>
</班级>
package com.pc;
import java.awt.List;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
*
* @author Switch
* @function Java解析XML
*
*/
public class XML5 {
// 使用dom技术对xml文件进行操作
public static void main(String[] args) throws Exception {
// 1.创建一个DocumentBuilderFactory对象
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
// 2.通过DocumentBuilderFactory,得到一个DocumentBuilder对象
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
// 3.指定解析哪个xml文件
Document document = documentBuilder.parse("src/com/pc/XML5.xml");
// 4.对XML文档操作
// System.out.println(document);
// list(document);
// read(document);
// add(document);
// delete(document, "小明");
update(document, "小明", "30");
}
// 更新一个元素(通过名字更新一个学生的年龄)
public static void update(Document doc, String name, String age)
throws Exception {
NodeList nodes = doc.getElementsByTagName("名字");
for (int i = 0; i < nodes.getLength(); i++) {
Element nameE = (Element) nodes.item(i);
if (nameE.getTextContent().equals(name)) {
Node prNode = nameE.getParentNode();
NodeList stuAttributes = prNode.getChildNodes();
for (int j = 0; j < stuAttributes.getLength(); j++) {
Node stuAttribute = stuAttributes.item(j);
if (stuAttribute.getNodeName().equals("年龄")) {
stuAttribute.setTextContent(age);
}
}
}
}
updateToXML(doc);
}
// 删除一个元素(通过名字删除一个学生)
public static void delete(Document doc, String name) throws Exception {
// 找到第一个学生
NodeList nodes = doc.getElementsByTagName("名字");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
if (node.getTextContent().equals(name)) {
Node prNode = node.getParentNode();
prNode.getParentNode().removeChild(prNode);
}
}
// 更新到XML
updateToXML(doc);
}
// 添加一个学生到XML文件
public static void add(Document doc) throws Exception {
// 创建一个新的学生节点
Element newStu = doc.createElement("学生");
newStu.setAttribute("性别", "男");
Element newStu_name = doc.createElement("名字");
newStu_name.setTextContent("小明");
Element newStu_age = doc.createElement("年龄");
newStu_age.setTextContent("21");
Element newStu_intro = doc.createElement("介绍");
newStu_intro.setTextContent("好");
newStu.appendChild(newStu_name);
newStu.appendChild(newStu_age);
newStu.appendChild(newStu_intro);
// 把新的学生节点添加到根元素
doc.getDocumentElement().appendChild(newStu);
// 更新到XML
updateToXML(doc);
}
// 更新到XML
private static void updateToXML(Document doc)
throws TransformerFactoryConfigurationError,
TransformerConfigurationException, TransformerException {
// 得到TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
// 通过TransformerFactory对象得到一个转换器
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(
"src/com/pc/XML5.xml"));
}
// 具体查询某个学生的信息(小时第一个学生的所有)
public static void read(Document doc) {
NodeList nodes = doc.getElementsByTagName("学生");
// 取出第一个学生
Element stu1 = (Element) nodes.item(0);
Element name = (Element) stu1.getElementsByTagName("名字").item(0);
System.out.println("姓名:" + name.getTextContent() + " 性别:"
+ stu1.getAttribute("性别"));
}
// 遍历该XML文件
public static void list(Node node) {
if (node.getNodeType() == node.ELEMENT_NODE) {
System.out.println("名字:" + node.getNodeName());
}
// 取出node的子节点
NodeList nodes = node.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
// 显示所有子节点
Node n = nodes.item(i);
list(n);
}
}
}