「xml格式化java」XML格式化数据单元
本篇文章给大家谈谈xml格式化java,以及XML格式化数据单元对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何把xml内容转换为java格式
- 2、如何将xml文件转变成java对象
- 3、xml怎么转为java对象,急啊!!!!在线等
- 4、JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写
- 5、java中如何写xml
- 6、100分求高手帮我将xml文件转为java类
如何把xml内容转换为java格式
使用XStream完成 java 类与 XML 互换。
下面代码实现了以下4种基本功能:
1. object类型转换为xml类型,在控制台打印
2. xml类型转换为object类型,在控制台打印
3. 将object类型转换为xml类型,并写入XML文件
4. 读取XML文件,加载进相应Object类型
====================================================
1。加载 XStream 需要的jar包 xstream-1.4.2.jar
xpp3_min-1.1.4c.jar
xmlpull-1.1.3.1.jar
2。创建实体类User.java
package com.entity;
/**
* 实体类
*/
public class User {
private String userName;
private String passWord;
private String registeredTime;
public User() { }
public User(String userName, String passWord, String registeredTime) {
this.userName = userName;
this.passWord = passWord;
this.registeredTime = registeredTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getRegisteredTime() {
return registeredTime;
}
public void setRegisteredTime(String registeredTime) {
this.registeredTime = registeredTime;
}
}
3。编写功能实现类
package com.switcher;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.entity.User;
import com.thoughtworks.xstream.XStream;
/**
*
* 使用 XStream不用任何映射就能实现多数 Java 对象的序列化。
* 在生成的 XML中对象名变成了元素名,类中的字符串组成了 XML中的元素内容。
* 使用 XStream 序列化的类不需要实现 Serializable 接口。
* XStream 是一种序列化工具而不是数据绑定工具
* 不能从XML 或者 XML Schema Definition (XSD) 文件生成类。
*/
public class SwitchXML {
/*
* XStream 不关心序列化/逆序列化的类的字段的可见性。
* 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
* 序列化/逆序列化的类不需要有默认构造函数。
*/
private XStream xStream = new XStream();
private String xmlPath = "D:/userdata.xml";
// 1. obj - xml(object类型转换为xml类型)
public String printXML(User user) {
System.out.println("obj - xml");
String xml = xStream.toXML(user);
System.out.println(xml);
return xml;
}
// 2. xml-obj(xml类型转换为object类型,并打印)
public void printObj(String xml) {
System.out.println("xml - obj");
User u = (User) xStream.fromXML(xml);
System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime());
}
// 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)
public void writerXML(User user) {
try {
FileOutputStream fs = new FileOutputStream(xmlPath);
xStream.toXML(user, fs);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
// 4. 读取XML文件,加载进相应Object类型
public void readerXML() {
User user = new User();
FileInputStream fis = null;
try {
fis = new FileInputStream(xmlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xStream.fromXML(fis, user);
// 打印对象信息
System.out.println(user.toString());
// 打印对象的属性值
System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"
+ user.getRegisteredTime());
}
public static void main(String[] args) {
// 用户名
String username = "admin";
// 密码
String password = "admin";
// 注册时间
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String registeredtime = format.format(now);
User user = new User(username, password, registeredtime);
SwitchXML switchXML = new SwitchXML();
// 1. object类型转换为xml类型,在控制台打印
String xml = switchXML.printXML(user);
System.out.println("---------------------");
// 2. xml类型转换为object类型,在控制台打印
switchXML.printObj(xml);
System.out.println("---------------------");
// 3. 将object类型转换为xml类型,并写入XML文件
switchXML.writerXML(user);
System.out.println("---------------------");
// 4. 读取XML文件,加载进相应Object类型
switchXML.readerXML();
}
}
如何将xml文件转变成java对象
首先 java是面向对象的编程语言,所以你要理解面向对象的思想。在这个前提下我们可以理解 文件 本身就是java的对象File,而xml只是File类中对象的一种实例。你可以创建一个File 把你的xml的路径传入这个对象的有参构造,这样就实例化了一个xml文件类的对象
xml怎么转为java对象,急啊!!!!在线等
要自己解析啊,
把xml文本加载进来,一层一层的解析,然后
A a = new A();
a...=...;
JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;
public class Test {
public static void main(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
Element theBook=null, theElem=null, root=null;
try {
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder db=factory.newDocumentBuilder();
Document xmldoc=db.parse(new File("Test1.xml"));
root=xmldoc.getDocumentElement();
theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root);
System.out.println("--- 查询找《哈里波特》 ----");
Element nameNode=(Element)theBook.getElementsByTagName("price").item(0);
String name=nameNode.getFirstChild().getNodeValue();
System.out.println(name);
output(theBook);
System.out.println("=============selectSingleNode(books/book[name='哈里波特'], root)==================");
//--- 新建一本书开始 ----
theBook=xmldoc.createElement("book");
theElem=xmldoc.createElement("name");
theElem.setTextContent("新书");
theBook.appendChild(theElem);
theElem=xmldoc.createElement("price");
theElem.setTextContent("20");
theBook.appendChild(theElem);
theElem=xmldoc.createElement("memo");
theElem.setTextContent("新书的更好看。");
theBook.appendChild(theElem);
root.appendChild(theBook);
System.out.println("--- 新建一本书开始 ----");
output(xmldoc);
System.out.println("==============================");
//--- 新建一本书完成 ----
//--- 下面对《哈里波特》做一些修改。 ----
//--- 查询找《哈里波特》----
//--- 此时修改这本书的价格 -----
theBook.getElementsByTagName("price").item(0).setTextContent("15");//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。
System.out.println("--- 此时修改这本书的价格 ----");
output(theBook);
//--- 另外还想加一个属性id,值为B01 ----
theBook.setAttribute("id", "B01");
System.out.println("--- 另外还想加一个属性id,值为B01 ----");
output(theBook);
//--- 对《哈里波特》修改完成。 ----
//--- 要用id属性删除《三国演义》这本书 ----
theBook=(Element) selectSingleNode("/books/book[@id='B02']", root);
System.out.println("--- 要用id属性删除《三国演义》这本书 ----");
output(theBook);
theBook.getParentNode().removeChild(theBook);
System.out.println("--- 删除后的XML ----");
output(xmldoc);
//--- 再将所有价格低于10的书删除 ----
NodeList someBooks=selectNodes("/books/book[price10]", root);
System.out.println("--- 再将所有价格低于10的书删除 ---");
System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---");
for(int i=0;isomeBooks.getLength();i++) {
someBooks.item(i).getParentNode().removeChild(someBooks.item(i));
}
output(xmldoc);
saveXml("Test1_Edited.xml", xmldoc);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void output(Node node) {//将node的XML字符串输出到控制台
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("encoding", "gb2312");
transformer.setOutputProperty("indent", "yes");
DOMSource source=new DOMSource();
source.setNode(node);
StreamResult result=new StreamResult();
result.setOutputStream(System.out);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
Node result=null;
XPathFactory xpathFactory=XPathFactory.newInstance();
XPath xpath=xpathFactory.newXPath();
try {
result=(Node) xpath.evaluate(express, source, XPathConstants.NODE);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。
NodeList result=null;
XPathFactory xpathFactory=XPathFactory.newInstance();
XPath xpath=xpathFactory.newXPath();
try {
result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return result;
}
public static void saveXml(String fileName, Document doc) {//将Document输出到文件
TransformerFactory transFactory=TransformerFactory.newInstance();
try {
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty("indent", "yes");
DOMSource source=new DOMSource();
source.setNode(doc);
StreamResult result=new StreamResult();
result.setOutputStream(new FileOutputStream(fileName));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
XML:
?xml version="1.0" encoding="GBK"?
books
book
name哈里波特/name
price10/price
memo这是一本很好看的书。/memo
/book
book id="B02"
name三国演义/name
price10/price
memo四大名著之一。/memo
/book
book id="B03"
name水浒/name
price6/price
memo四大名著之一。/memo
/book
book id="B04"
name红楼/name
price5/price
memo四大名著之一。/memo
/book
/books
java中如何写xml
呵呵,你这个问题,其实写XML很简单的,氛围以下几步:1.导入DOM4J包,在此我使用dom4j来做。2.创建dom4j的实例:Document document = DocumentHelper.createDocument();3.一级一级的添加节点或者属性,这个具体参照dom4j帮助:Element rootGen = document.addElement("root");4.定义以下3个对象,然后进行操作: Writer writer = null;
OutputFormat format = null;
XMLWriter xmlwriter = null; ***********************************************************************************附上代码: public void CreateXMl(StudentBean sn){
//创建document对象
Document document = DocumentHelper.createDocument();
//定义根节点Element
Element rootGen = document.addElement("root");
//定义根节点ROOT的子节点们
Element nameGen = rootGen.addElement("Name");
nameGen.addAttribute("name", "我是中文");
Element ageGen = rootGen.addElement("Age");
Element addrGen = rootGen.addElement("Address");
Writer writer = null;
OutputFormat format = null;
XMLWriter xmlwriter = null;
//将定义好的内容写入xml文件中
try {
//使用这个writer也可以,只不过遇到中文会乱码哦
// writer = new FileWriter("d:/test.xml");
//进行格式化
format = OutputFormat.createPrettyPrint();
//设定编码
format.setEncoding("UTF-8");
xmlwriter = new XMLWriter(new FileOutputStream("d:/test.xml"), format);
xmlwriter.write(document);
xmlwriter.flush();
xmlwriter.close();
System.out.println("-----------Xmlfile successfully created-------------");
} catch (Exception e) {
e.printStackTrace();
System.out.println("-----------Exception occured during of create xmlfile -------");
}
}
100分求高手帮我将xml文件转为java类
奋斗了20个小时,终于完成了,本类无需导入任何额外的包,底层细节全部在本类中完成!
说明,本类通过读入xml文件,并把信息正确分成存入到Guird列表中。通过调用getGuirdList()将返回结果集。要使用其中的某一项,只接到对象中用方法获取即可,希望能够满足楼主的需求!!
TransXml.java
import java.io.*;
import java.util.Vector;
import java.util.Scanner;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class TransXml{
private String xmlAddress;
private VectorGuird guir;//表示一级子目录下的Guird向量
private FileInputStream inStr;
private InputStreamReader inRea;
private int whLayer=0;//标志表的层次,为0表示根表,为1表示第一层子表
private int whiLab=0;//表示当前标签是第几层
boolean isend=false;
boolean isguirs=false;
boolean isguir=false;
StringBuffer str=new StringBuffer();//表示中的词
String strVul;
StringBuffer value=new StringBuffer();//表示具体类容
boolean isWorld=false;
boolean isValue=false;
boolean isSubgu=false;
boolean notEnd=true;
LinkedListGuird linList;
public TransXml(){
}
public TransXml(String xmlAdd){
guir=new VectorGuird();
linList=new LinkedListGuird();
this.xmlAddress=xmlAdd;
System.out.println("开始读取xml文件");
try{
inStr=new FileInputStream(xmlAddress);
inRea=new InputStreamReader(inStr);
}catch(IOException e){
System.out.println("Xml文件地址无效");
}
System.out.println("开始读取xml文件完成!");
Translate();
}
public void Translate(){
Guird theGu=new Guird();
while(notEnd)
{
int tt=-1;
try{
tt=inRea.read();
}catch(IOException e){
System.out.println("字符读取失败!");
}
if(tt==-1){//文件已经读完了
notEnd=false;
break;
}
char ch=(char)tt;
if(ch==''){
//说明,前面如果有类容的话,内容完结
isValue=false;//说明内容已经完了
isWorld=true;//表示下面是里德内容
}
if(ch==''){
isWorld=false;//表示括号内的字符串结束了
strVul=str.toString();//表示当前的目录层次
if(strVul.equalsIgnoreCase("guirds")){//这是配置文件正式开始的标志
isguirs=true;
}else if(strVul.equalsIgnoreCase("guird")){//说明已经进入guird类
isguir=true;
}else if(strVul.equalsIgnoreCase("id")){//进入id属性
isValue=true;
}else if(strVul.equalsIgnoreCase("name")){//进入name属性
isValue=true;
}else if(strVul.equalsIgnoreCase("ename")){//进入ename属性
isValue=true;
}else if(strVul.equalsIgnoreCase("parentid")){//进入parentid属性
isValue=true;
}else if(strVul.equalsIgnoreCase("subguirds")){//进入subguirds属性,说明它还有一个字表
isSubgu=true;
linList.addLast(theGu);//做入栈操作,添加到结尾
whLayer++;//原始的值为0,它表示当前操作guird的级数
//那么下面的读取将是新的Guird类,所以要把现在的theGu保存后重新初始化
theGu=new Guird();//初始化,后面接着用
}else if(strVul.equalsIgnoreCase("/guirds")){//这是配置文件结束的标志
isguirs=false;//程序已经阅读完毕XML文件
notEnd=false;
}else if(strVul.equalsIgnoreCase("/guird")){//说明已经结束guird类
isguir=false;//说明一条记录已经完成,所以要对其存储
//theGu的属性是在/标签前就写入完毕了,那么应该写入上级目录中,
//如果是定定及目录,则直接写入给定的Vector
if(whLayer0){//说明还不是根目录
Guird tempguir=linList.getLast();
VectorGuird tempqq=(Vector)tempguir.getSubGuird();
if(tempqq==null){//说明前面的集合为空
tempqq=new Vector();
}
tempqq.add(theGu);//集合中增加这一项
tempguir.setSubGuird(tempqq);
linList.removeLast();//移动原来的换新的内容
linList.add(tempguir);
theGu=new Guird();//重新初始化供后面使用,并不要去改变whLayer值
}else if(whLayer==0){//这说明当前的theGu是指1级子目录,
guir.add(theGu);//添加一条记录到Vector
theGu=new Guird();// 重新初始化以便下次正确用到
}else{
System.out.println("xml文件标签错误!");
notEnd=false;
}
}else if(strVul.equalsIgnoreCase("/id")){//结束id属性
isValue=false;
theGu.setId(new Integer(value.toString()));
value=new StringBuffer();
}else if(strVul.equalsIgnoreCase("/name")){//结束name属性
isValue=false;
theGu.setName(value.toString());
// System.out.println("这里写入的名字是:"+theGu.getName());
value=new StringBuffer();
}else if(strVul.equalsIgnoreCase("/ename")){//结束ename属性
isValue=false;
theGu.setEname(value.toString());
value=new StringBuffer();
}else if(strVul.equalsIgnoreCase("/parentid")){//结束parentid属性
isValue=false;
theGu.setParentId(new Integer(value.toString()));
value=new StringBuffer();
}else if(strVul.equalsIgnoreCase("/subguirds")){//结束subguirds属性,字表完成
isSubgu=false;
//刚刚结束的这个Guird就是whLayer级子目录
//要判断是根类还是那一级子目录
whLayer--;//表示上一级目录
if(whLayer0){
theGu=linList.getLast();//成为当前节点
//所以当前操作对象又将是刚从LinkedListed中取出的那个
linList.removeLast();//已经用过了,最后一个移除,相当于退栈
}
else if(whLayer==0){//根节点下
theGu=linList.getLast();
linList.removeLast();
}else{
notEnd=false;//因为whLayer不可能小于0
System.out.println(xmlAddress+"标签不完整!请检查!");
break;
}
}
strVul="";
str=new StringBuffer();//重新初始化,准备后面使用
}
if(isWorld==true){
if((char)tt!=''(char)tt!='')//因为具有延时性所以要增加这个条件
if(tt!=32tt!=9)//它不为空格和Tab,即在xml中标签内的内容将忽略Tab和空格
str.append((char)tt);
}
if(isValue==true){//当前是类容属性值
if((char)tt!=''(char)tt!=''){
if(tt!=32tt!=9)//它不为空格和Tab
value.append((char)tt);
}
}
/**
* 为什么这里注释掉了,因为前面以当发现value值取到最后一位后就设置isValue为false
* 但是要当下一个/结尾标签完才会调用value值并进行操作,所以,value不能立刻变为空内容
* 那么当它被使用后,采设置新的对象是可取的
* else{
* value=new StringBuffer();//避免干扰下次
* }
*/
}
try{
inRea.close();
inStr.close();
}catch(IOException e){
System.out.println("流关闭失败!");
}
}
public Vector getGuirdList(){
return this.guir;//获得最终的子目录列表
}
/**
* 原来写的main方法进行测试,在这里就省略了
*/
}
Xml文件中guirds标签中,有几对guird标签就会返回几条结果,当然guird是指在guirds目录下的第一层标签,而其他的二级guird标签中的内容则存在相应的ListGuird subGuird中。
That's all !
关于xml格式化java和XML格式化数据单元的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。