Japx操作xml文档
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>小刘</name>
<age>25</age>
<addr>兰州交通大学</addr>
</person>
<person id="2">
<name>小张</name>
<age>24</age>
<addr>西北师范大学</addr>
</person>
</persons>
japx操作
package com.water.coder;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
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.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestForXmlParse {
// 每个函数都是一个测试函数
@Test //junit4导包
public void testDom01() throws ParserConfigurationException, SAXException,
IOException {
// 建立解析工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 建立解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// 加载文档
Document document = db.parse(new File("Person.xml"));
// 通过名字获取标签
NodeList list = document.getElementsByTagName("name");
// 了解No的List和Node的用法,如何遍历
for (int i = 0; i < list.getLength(); i++) {
Element elem = (Element) list.item(i);
// 获取元素的文本内容
String text = elem.getTextContent();
System.out.println("人名:" + text);
}
}
@Test
public void testDom02() throws ParserConfigurationException,
SAXException, IOException {
// Dom解析三步骤:
// 1.获取解析工厂
// 2.获取解析器
// 3.加载文档,并获取文档节点
// 4.进行需求的解析
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("Person.xml"));
// 解析具体的对象时,一般分为两种办法
// 1.通过获取他们的父节点
// 2.通过获取他们的兄弟节点
//在这里你需要理解一个点:
/* <person>
<name>小刘</name>
<age>25</age>
<addr>兰州交通大学</addr>
</person>
person下面的第一个节点为回车换行<name>为第二个节点(访问时item(1))
person下面的第三个节点为回车换行<age>为第四个节点(访问时item(3))
person下面的第四个节点为回车换行<addr>为第五个节点(访问时item(5))
*/
// 需求1:获取小刘的地址
// 1。获取父节点
NodeList list = document.getElementsByTagName("person");
for (int i = 0; i < list.getLength(); i++) {
// 获取本节点
Element person = (Element) list.item(i);
// 获取子节点
NodeList childList = person.getChildNodes();
// 下面一般要你了解自己的数据结构
// 我的名字存储在person下面的第一个节点
Element pName = (Element) childList.item(1);
// 如果名字等于你要查找的名字
if (pName.getTextContent().equals("小刘")) {
// 地址存放在Person下的第5个
Element pAddr = (Element) childList.item(5);
System.out.println("小刘的地址为" + pAddr.getTextContent());
}
}
// 需求2:获取小张的年龄
NodeList pNameList = document.getElementsByTagName("name");
for(int i = 0;i<pNameList.getLength();i++)
{
//获取对应的姓名节点
Element pName = (Element)pNameList.item(i);
//判断
if(pName.getTextContent().equals("小张"))
{
//找到节点后
//因为节点与节点之间相聚比较多,使用函数封装一下,否则代码看起来不整洁
Element pAge = getPAddr(pName);
System.out.println("小张的年龄"+pAge.getTextContent());
}
}
}
//获取这个结构中的年龄节点
public Element getPAddr(Element pName)
{
//getNextSibling获取下一个节点,和上面的一样有文本节点和元素节点
Element pAge = (Element)pName.getNextSibling().getNextSibling();
return pAge;
}
@Test
public void testDom03() throws ParserConfigurationException, SAXException, IOException
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("Person.xml"));
//获取节点通过getElementById();
//ID是文档约束,不仅仅是属性而已
//如果只是属性那么下面获取的就是空指针了
Element eml = document.getElementById("1");
if(eml!=null)
{
System.out.println(eml.getNextSibling().getNextSibling().getTextContent());
}
}
@Test
public void testDom04() throws ParserConfigurationException, SAXException, IOException, TransformerException
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("Person.xml"));
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
DOMSource domSource = new DOMSource(doc);
StreamResult sr = new StreamResult(new File("Person_bak.xml"));
tf.transform(domSource, sr);
}
}
c#操作xml文件
使用vs2013
1.操作步骤:
- 建立window窗体程序(别忘了命名和路径问题)
- 如果想要继续增加窗体,就在资源管理器中的项目文件上右击,之后进行选择添加->window窗体程序,(注意命名)
- 视图里面有工具箱,(TextBox不是EditBox这个区别于MFC)
- 另外注意这个的名字(name,可以理解为ID,在程序里面的唯一标识,区别MFC中的ID)
2.增加节点
string xmlFileName = "E:\\大三下作业\\xml\\第八次\\Students.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xmlFileName);
XmlElement student = doc.CreateElement("学生");
doc.DocumentElement.AppendChild(student);//根节点扩展
XmlElement number = doc.CreateElement("学号");
number.InnerText = textBox2.Text;
student.AppendChild(number);//扩展普通节点
3.删除
public void Delete(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 var root = xmlDoc.DocumentElement;//取到根结点
6
7 var element = xmlDoc.SelectSingleNode("BookStore/NewBook");
8 root.RemoveChild(element);
9 xmlDoc.Save(xmlPath);
10 }