java解析String字符串xml 多级节点NodeList
来源:互联网 发布:linux 发送icmp请求包 编辑:程序博客网 时间:2024/04/27 11:34
NodeList subNodeList = rootNode.getChildNodes();
for (int i = 0; i < subNodeList.getLength(); i++) {
System.out.println("子节点的节点名称:" + subNodeList.item(i).getNodeName());
System.out.println("子节点的节点文本内容:" + subNodeList.item(i).getTextContent());
}
for (int i = 0; i < subNodeList.getLength(); i++) {
System.out.println("子节点的节点名称:" + subNodeList.item(i).getNodeName());
System.out.println("子节点的节点文本内容:" + subNodeList.item(i).getTextContent());
}
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina">
<Connector>第一个连接器</Connector>
<Connector>第二个连接器
<open>开启服务</open>
<init>初始化一下</init>
<service>执行请求服务</service>
<destory>销毁一下</destory>
<close>关闭服务</close>
</Connector>
</Service>
</Server>
public void parseXml03(){
try{
//创建DocumentBuilder工厂实例
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//new一个新的DocumentBuilder
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream inputStream = this.getClass().getResourceAsStream("server03.xml");
Document document = db.parse(inputStream);
//根据节点名称获取节点集合
NodeList nodeList = document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if(!"#text".equals(node.getNodeName())){
System.out.println("【1】" + node.getNodeName() + ":" + node.getFirstChild().getNodeValue());
}
NodeList subNodeList = node.getChildNodes();
for (int j = 0; j < subNodeList.getLength(); j++) {
Node subNode = subNodeList.item(j);
if(!"#text".equals(subNode.getNodeName())){
System.out.println(" 【2】" + subNode.getNodeName() + ":" + subNode.getFirstChild().getNodeValue());
}
NodeList subSubNodeList = subNode.getChildNodes();
for (int k = 0; k < subSubNodeList.getLength(); k++) {
Node subSubNode = subSubNodeList.item(k);
if(!"#text".equals(subSubNode.getNodeName())){
System.out.println(" 【3】" + subSubNode.getNodeName() + ":" + subSubNode.getFirstChild().getNodeValue());
}
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
接下来执行该类的main方法,console效果如下:
<?xml version="1.0" encoding="GB2312"?><学生花名册> <学生 性别 = "男"> <姓名>李华</姓名> <年龄>14</年龄> </学生> <学生 性别 = "男"> <姓名>张三</姓名> <年龄>16</年龄> </学生></学生花名册>
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.OutputStreamWriter;import java.util.Iterator;import java.util.Vector;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;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;import org.w3c.dom.Text;public class DomTest { Vector students_Vector; private Vector readXMLFile(String file) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); Document doc = builder.parse(file); // 获取到xml文件 // 下面开始读取 Element root = doc.getDocumentElement(); // 获取根元素 NodeList students = root.getElementsByTagName("学生"); students_Vector = new Vector(); for (int i = 0; i < students.getLength(); i++) { // 一次取得每一个学生元素 Element ss = (Element) students.item(i); // 创建一个学生的实例 student stu = new student(); stu.setSex(ss.getAttribute("性别")); NodeList names = ss.getElementsByTagName("姓名"); Element e = (Element) names.item(0); Node t = e.getFirstChild(); stu.setName(t.getNodeValue()); NodeList ages = ss.getElementsByTagName("年龄"); e = (Element) ages.item(0); t = e.getFirstChild(); stu.setAge(Integer.parseInt(t.getNodeValue())); students_Vector.add(stu); } return students_Vector; } /** * 功能:直接提取XML格式字符串中的信息 */ private Vector readXMLString(String xmlStr) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbf.newDocumentBuilder(); InputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes()); Document doc = builder.parse(inputStream); // // 下面开始读取 Element root = doc.getDocumentElement(); // 获取根元素 NodeList students = root.getElementsByTagName("学生"); students_Vector = new Vector(); for (int i = 0; i < students.getLength(); i++) { // 一次取得每一个学生元素 Element ss = (Element) students.item(i); // 创建一个学生的实例 student stu = new student(); stu.setSex(ss.getAttribute("性别")); NodeList names = ss.getElementsByTagName("姓名"); Element e = (Element) names.item(0); Node t = e.getFirstChild(); stu.setName(t.getNodeValue()); NodeList ages = ss.getElementsByTagName("年龄"); e = (Element) ages.item(0); t = e.getFirstChild(); stu.setAge(Integer.parseInt(t.getNodeValue())); students_Vector.add(stu); } return students_Vector; } // 将Document内容 写入XML字符串并返回 private String callWriteXmlString(Document doc, String encoding) { try { Source source = new DOMSource(doc); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); OutputStreamWriter write = new OutputStreamWriter(outStream); Result result = new StreamResult(write); Transformer xformer = TransformerFactory.newInstance() .newTransformer(); xformer.setOutputProperty(OutputKeys.ENCODING, encoding); xformer.transform(source, result); return outStream.toString(); } catch (TransformerConfigurationException e) { e.printStackTrace(); return null; } catch (TransformerException e) { e.printStackTrace(); return null; } } /** * 功能:生成XML格式的字符串 */ public String writeXMLString() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; try { builder = dbf.newDocumentBuilder(); } catch (Exception e) { } Document doc = builder.newDocument(); Element root = doc.createElement("学生花名册"); doc.appendChild(root); // 将根元素添加到文档上 // 获取学生信息 for (int i = 0; i < students_Vector.size(); i++) { student s = (student) students_Vector.get(i); // 创建一个学生 Element stu = doc.createElement("学生"); stu.setAttribute("性别", s.getSex()); root.appendChild(stu);// 添加属性 // 创建文本姓名节点 Element name = doc.createElement("姓名"); stu.appendChild(name); Text tname = doc.createTextNode(s.getName()); name.appendChild(tname); // 创建文本年龄节点 Element age = doc.createElement("年龄"); stu.appendChild(age); // 将age添加到学生节点上 Text tage = doc.createTextNode(String.valueOf(s.getAge())); age.appendChild(tage); // 将文本节点放在age节点上 } try { String result = callWriteXmlString(doc, "gb2312"); return result; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 主函数 */ public static void main(String args[]) { String str = "xml\\student.xml"; DomTest t = new DomTest(); System.out.println("解析原始XML文件:"); try { Vector v = t.readXMLFile(str); Iterator it = v.iterator(); while (it.hasNext()) { student s = (student) it.next(); System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getSex()); } } catch (Exception e) { e.printStackTrace(); } String xmlStr = t.writeXMLString(); System.out.println("\n生成的XML字符串:\n" + xmlStr); try { Vector v = t.readXMLString(xmlStr); Iterator it = v.iterator(); System.out.println("\n解析生成的XML字符串:"); while (it.hasNext()) { student s = (student) it.next(); System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getSex()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}class student { private String sex; private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setSex(String s) { sex = s; } public String getSex() { return sex; } public void setName(String n) { name = n; } public String getName() { return name; }}
输出:
解析原始XML文件:李华 14 男张三 16 男生成的XML字符串:<?xml version="1.0" encoding="GB2312" standalone="no"?><学生花名册><学生 性别="男"><姓名>李华</姓名><年龄>14</年龄></学生><学生 性别="男"><姓名>张三</姓名><年龄>16</年龄></学生></学生花名册>解析生成的XML字符串:李华 14 男张三 16 男
0 0
- java解析String字符串xml 多级节点NodeList
- java解析String字符串xml 多级节点NodeList
- java解析String类型t复杂xml,多级节点,最好的例子
- java解析多级xml
- Foreach循环--Nodelist枚举XML节点
- xml节点解析成字符串的方法
- 解析XML字符串,得到各个节点数据
- java解析xml字符串
- java解析xml字符串
- JAVA 解析Xml字符串
- Java字符串String的解析
- java解析xml文件获取节点内容
- java dom4j 解析xml 多节点
- 解析xml格式的string内容并修改节点内容
- java解析xml格式字符串
- JAVA解析XML格式字符串
- JAVA解析XML格式字符串
- JAVA解析XML格式字符串
- Zuul 2 : The Netflix Journey to Asynchronous, Non-Blocking Systems
- css浮动
- 求最大公约数的算法
- acm UVA 227 Puzzle字符串处理
- HTML JavaScript 基础 (下)
- java解析String字符串xml 多级节点NodeList
- CentOS7.2 在GUI下关闭X Server
- Linux系统概念与体系(待修改)
- 对于一些经典库函数的源代码认识以及分析1.
- HDU2602Bone Collector(01背包)
- mysql多表联查
- navbar的一些坑
- C和Java中static修饰符的作用
- 如何查看Google官方文档