
正文
xml代码转换成java xml转成javabean
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
从XML变成View,它经历了什么?
码个蛋(codeegg)第 626 次推文
作者:看我眼前007
原文:
友情提示:
本文篇幅较长xml代码转换成java,建议在电脑上慢慢阅读~
写作背景
Android 开发框架中xml代码转换成java,使用 Xml 文件描述 Ui 页面,通过setContentView(resId)或者LayoutInflater.inflate(resId,……)的方式把 Xml 文件描述的页面转换成 Java 对象。Xml 文件加上 AndroidStudio 提供的预览功能,使得 Android 开发过程中页面和业务逻辑可以并行开发,极大地提高了开发效率。
但是大部分 Android 工程师对 xml 文件如何转换成 Java 不是十分了解,本文将带大家一起探究 View 从 xml 文件到 Java 对象的转换过程
我们先罗列一下 xml 转换成 Java 对象的方式
我们一般在项目使用的 Activity 可能是
所有的 Activity 都是 android.app.Activity 的子类。
但是!每个继承 android.app.Activity 的子类 setContentView(resId) 实现方式都被重载了。我们这里先看最基础的 android.app.Activity
查看一下 getWindow源码
全局搜索 mWindow 对象赋值的地方找到以下代码
这里 PhoneWindow 的源码在 sdk 里面是隐藏的,我们去 androidxref -PhoneWindow.java 查看 PhoneWindow.setContentView(layoutResID)
当我们没有设置转场动画的时候会执行
在 PhoneWindow 的构造函数中我们找到了 mLayoutInflater 对象赋值语句
所以我们得出一个结论
Activity.setContentView(resId) 最终还是使用
LayoutInflater.from(context).inflate(resId, ……)
再回头看下
android.support.v7.app. AppCompatActivity 和
android.support.v4.app. FragmentActivity
我们发现
android.support.v4.app. FragmentActivity 没有重载
android.app.Activity. setContentView (resId),
但是 android.support.v7.app. AppCompatActivity 重载了
再跟踪一下源代码我们发现最终会调用到
android.support.v7.app. AppCompatDelegateImplV9 . setContentView (resId)
这里我们又发现了 LayoutInflater的身影。
这里我们可以总结一下:
xml 转成成 Java对象是通过 LayoutInflater的inflate 方法来完成的。
LayoutInflater对象实例化
看一下 LayoutInflater的源码第一行
LayoutInflater 是一个抽象类, 抽象类是不能实例化的
看 Activity 的 getLayoutInflater
这里我们就可以看出 Activity 通过 getLayoutInflater 获取的是 PhoneWindow 的 mLayoutInflater (如果忘记了可以往上翻一下,或者去参考资料的链接里找找源码)
再看一下 LayoutInflater.from(context)
此时,我们必须请出柯南君帮我们宣布
真相只有一个!最终都是通过服务获取 LayoutInflater实例对象。
所以我们直接查看:
ContextImpl.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
继续跟踪 SystemServiceRegistry
这时候我们在 SystemServiceRegistry 类停留一下,发现这里似乎只注册各种系统服务的地方。
我们找到了
Context . LAYOUT_INFLATER_SERVICE 注册代码。
然后我们终于找到 LayoutInflater的实现类是 PhoneLayoutInflater
此时我们可以休息一下,喝口水,上个卫生间,进入下个阶段~
读取xml文件并创建View对象
再去源码查看一下,发现两个方法其实只有一个方法是核心,另一个只是做了一下封装,让我们少传入一个参数。
所以我们重点看一下 inflate(@LayoutRes int resource, @able ViewGroup root, boolean attachToRoot) 的源码
我们看到首先通过 res 对象把 resId 指向的 xml 文件转换为 XmlResourceParser 然后执行 inflate(parser, root, attachToRoot) 方法,该方法比较长,这里只贴出核心步骤。
以上步骤还是很长,我们将拆分几部分分析。
如果 xml 根标签是 merge,则 root 不能为空, attachToRoot 必须是 true。
然后执行 rInflate(parser, root, inflaterContext, attrs, false)
上面这个方式我们需要重点记一下
如果子节点是 include,则执行 parseInclude。
parseInclude的源码和 inflate(parser, root, attachToRoot)类似,都是读取xml对应的文件,转换成 XmlResourceParser 然后遍历里的标签。
经过层层调用,我们可以找到最终创建 View 的代码
第一部分代码,我们的到的结论是,
createViewFromTag(parent, name, context, attrs)负责创建 View 对象。
因为这里排除了merge标签,这里的根标签肯定是一个 View,所以调用了 createViewFromTag(root, name, inflaterContext, attrs)方法创建 View 。
再次印证了第一部分得出的结论 createViewFromTag (parent, name, context, attrs)负责创建 View 对象。
然后看下后面的代码我们就明白
inflate(@LayoutRes int resource, @able ViewGroup root, boolean attachToRoot) 三个参数的关系了
创建 View 对象
通过上面的判断我们终于找到了最最核心的方法 createViewFromTag
有包裹了一层,并且把 ignoreThemeAttr 设置为 false,表示这里会收到 Theme 的影响。
我们在 createViewFromTag(parent, name, context, attrs, false) 中找到了创建 View 的代码
这里又出现了 mFactory2、mFactory、mPrivateFactory 三个对象,似乎都是可以创建 View 。 对于android.app.Activity来说,这三个对象为 或者空实现(下一节会讲这个) 所以我们直接看
这里需要说明一下,如果 name属性里面含有 . 表示这是一个自定义 View,系统自带 View 我们可以省略类的路径,而自定义 View 则不能省略。
对于自定义 View 的创建,这里省略了大部分代码
仅仅看到 constructor . newInstanc e(args) ,我们已经明白这里使用了 反射创建 View 对象。
而对于 Android 内置的各种 View, 我们在 LayoutInflater 的实现类 PhoneLayoutInflater 中找到了重载
再看下 LayoutInflater 中的代码
我们可以看到, 对于系统内置的 View,会依次在 View 的标签前面加上
"android.widget."、"android.webkit."、"android.app." 、"android.view."
然后通过 反射 的方法 创建 View 。
(文章略有删减,可点击原文查看~)
到此 ,Xml 到 View 对象的转换过程全部结束~~~
看到这里的童鞋很辛苦!这项技能get了吗?
近期文章:
今日问题:
谁能来画个过程图?
画出来有信心的丢到码仔的学习群来,码仔给你发红包!
快来码仔社群解锁新姿势吧!社群升级:Max你的学习效率
相关问答
Q1: 怎样将xml档案生成java程式码
怎样将xml档案生成java程式码 xml是有格式xml代码转换成java的档案xml代码转换成java,到底里面储存xml代码转换成java了什么资料,得知道,才能办法处理
java程式码怎样生成csv档案
xml代码转换成java我来说一下大致xml代码转换成java的实现步骤,具体实现需要你自己去写了
1.检索资料,检索到的资料假定为一个list
2.你需要自己写一个objectToString之类的方法来把检索到的资料转化为一个String或StringBuffer,就是往各栏位间插",",往个记录间插"\r\n",如此这类的转换,假定转换好的字串为strResult.
3.然后用下面的程式码写在后台来控制下载,档名那里你可以把时间格式控制好,或者用前台传过来的引数做名字。
response.setContentType("application/download;charset=UTF-8");
response.setHeader("Content-disposition","attachment;filename=\"" +new Date()+".csv\"");
Java程式码完成后,怎样生成档案?
JCreator Pro 点一下编译按钮不就行了吗,再点执行按钮就运行了
eclipse通过xml档案如何找到java程式码
一、配置指南:
1、Eclipse中类档案(*.java)自动补全配置:
Windows-preferance-java-Editor-Content Assist
面板最下端 Auto Activation 将Auto activation triggers for Java后面的文字框中的“.”替换成“abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVWXYZ.”(注意后面还有一个".")
2、Eclipse中*.xml档案自动补全配置:
Windows-preferance-XML-XML Files-Editor-Content Assist
面板最上端 Auto Activation 将Prompt when these characters are inserted后面的文字框中的“=:”替换成“=:abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVWXYZ ”(注意后面还有一个空格)
二、使用指南:
在需要程式码自动补全的地方直接按ALT+/,就会出现类似如下图所示的效果,选择就可以啦:
java程式码生成dat档案
File filename = new File("F:\\zd.dat");
说明:dat可以改成任何副档名,是自己可以定义的,如下:
public void createFile(){path表示所建立档案的路径String path = "d:/tr/rt";File f = new File(path);if(!f.exists()){f.mkdirs();} fileName表示建立的档名;为txt型别;String fileName="test.txt";File file = new File(f,fileName);if(!file.exists()){try {file.createNewFile();} catch (IOException e) { TODO Auto-generated catch blocke.printStackTrace();}}}现在可以在d:/tr/rt 目录下找到test.txt档案
怎么生成pdf档案 java程式码
使用iText外挂,这是著名的开放原始码的站点sourcefe一个专案。网上很多例子,自己搜一下,不给你举例了。
java 怎样解析 excel生成的xml档案
java解析excel生成的xml档案的方法是使用dom4j实现的。
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
1、excel生成的xml样例档案:
?xml version="1.0"?
?mso-application progid="Excel.Sheet"?
Workbook xmlns="urn:schemas-microsoft-:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-:office:office"
xmlns:x="urn:schemas-microsoft-:office:excel"
xmlns:ss="urn:schemas-microsoft-:office:spreadsheet"
xmlns:=":w3./TR/REC-40"
DocumentProperties xmlns="urn:schemas-microsoft-:office:office"
Created2006-09-16T00:00:00Z/Created
LastSaved2016-07-25T03:26:50Z/LastSaved
Version14.00/Version
/DocumentProperties
OfficeDocumentSettings xmlns="urn:schemas-microsoft-:office:office"
AllowPNG/
RemovePersonalInformation/
/OfficeDocumentSettings
ExcelWorkbook xmlns="urn:schemas-microsoft-:office:excel"
WindowHeight7956/WindowHeight
WindowWidth14808/WindowWidth
WindowTopX240/WindowTopX
WindowTopY168/WindowTopY
ActiveSheet2/ActiveSheet
ProtectStructureFalse/ProtectStructure
ProtectWindowsFalse/ProtectWindows
/ExcelWorkbook
Styles
Style ss:ID="Default" ss:Name="Normal"
Alignment ss:Vertical="Bottom"/
Borders/
Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/
Interior/
NumberFormat/
Protection/
/Style
Style ss:ID="s16" ss:Name="好"
Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#006100"/
Interior ss:Color="#C6EFCE" ss:Pattern="Solid"/
/Style
Style ss:ID="s17"
Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:Indent="1"
ss:WrapText="1"/
Font ss:FontName="宋体" x:CharSet="134" ss:Size="8" ss:Color="#686868"/
NumberFormat ss:Format="@"/
/Style
Style ss:ID="s18" ss:Parent="s16"
Alignment ss:Vertical="Bottom"/
/Style
Style ss:ID="s19"
NumberFormat ss:Format="yyyy/m/d\ h:mm:ss"/
/Style
/Styles
Worksheet ss:Name="Sheet1"
Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="3" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.4"
Row
CellData ss:Type="String"工号/Data/Cell
CellData ss:Type="String"姓名 /Data/Cell
Cell ss:Index="5"Data ss:Type="String"工号/Data/Cell
CellData ss:Type="String"姓名/Data/Cell
/Row
Row
CellData ss:Type="Number"111/Data/Cell
CellData ss:Type="String"张三/Data/Cell
Cell ss:Index="5"Data ss:Type="Number"111/Data/Cell
Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"Data
ss:Type="String"张三/Data/Cell
/Row
Row
CellData ss:Type="Number"112/Data/Cell
CellData ss:Type="String"李四/Data/Cell
Cell ss:Index="5"Data ss:Type="Number"112/Data/Cell
Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"Data
ss:Type="String"李四/Data/Cell
/Row
/Table
WorksheetOptions xmlns="urn:schemas-microsoft-:office:excel"
PageSetup
Header x:Margin="0.3"/
Footer x:Margin="0.3"/
PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/
/PageSetup
Panes
Pane
Number3/Number
ActiveRow7/ActiveRow
ActiveCol5/ActiveCol
/Pane
/Panes
ProtectObjectsFalse/ProtectObjects
ProtectScenariosFalse/ProtectScenarios
/WorksheetOptions
/Worksheet
/Workbook
2、java解析程式码:
import java.io.File;
import java.util.Iterator;
import .dom4j.Attribute;
import .dom4j.Document;
import .dom4j.Element;
import .dom4j.io.SAXReader;
public class Demo {
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("person.xml"));
Element root = document.getRootElement();
Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();
未知属性名称情况下
/*Iterator attrIt = element.attributeIterator();
while (attrIt.hasNext()) {
Attribute a = (Attribute) attrIt.next();
System.out.println(a.getValue());
}*/
已知属性名称情况下
System.out.println("id: " + element.attributeValue("id"));
未知元素名情况下
/*Iterator eleIt = element.elementIterator();
while (eleIt.hasNext()) {
Element e = (Element) eleIt.next();
System.out.println(e.getName() + ": " + e.getText());
}
System.out.println();*/
已知元素名情况下
System.out.println("title: " + element.elementText("title"));
System.out.println("author: " + element.elementText("author"));
System.out.println();
}
}
}
求一段 读出\修改 xml档案的java程式码
import .dom4j.Element;
import .dom4j.tree.DefaultElement;
import .dom4j.tree.DefaultDocument;
上面是主要的包!
String xml = "";
Element _root = new DefaultElement("Business");
Element _node = _root.addElement("Output");
try {
_node.addElement("Password").addText("123");
_node.addElement("ReturnData").addText("1");
_node.addElement("ReturnInfo").addText("登陆成功");
}
catch (Exception ex) {
ex.printStackTrace();
}
DefaultDocument doc = new DefaultDocument(_root);
xml = doc.asXML();
上面是生成XML。
怎么通过java程式码向xml档案中添加注释
package .tuobao.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import .dom4j.Attribute;
import .dom4j.Document;
import .dom4j.DocumentHelper;
import .dom4j.Element;
import .dom4j.io.OutputFormat;
import .dom4j.io.SAXReader;
import .dom4j.io.XMLWriter;
public class testDom4j {
private static final String path = "f:" + java.io.File.separator
+ "eee.xml";
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(createXMLFile(path));
System.out.println(modiXMLFile(path, path));
System.out.println(formatXMLFile(path));
}
/**
* 建立一个XML文件,文件名由输入属性决定
*
* @param param
* filename 需建立的档名
* @return返回操作结果, 0表失败, 1表成功
*/
public static int createXMLFile(String filename) {
/** 返回操作结果, 0表失败, 1表成功 */
int returnValue = 0;
/** 建立document物件 */
Document document = DocumentHelper.createDocument();
/** 建立XML文件的根books */
Element booksElement = document.addElement("books");
/** 加入一行注释 */
booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
/** 加入第一个book节点 */
Element bookElement = booksElement.addElement("book");
/** 加入show属性内容 */
bookElement.addAttribute("show", "yes");
/** 加入title节点 */
Element titleElement = bookElement.addElement("title");
/** 为title设定内容 */
titleElement.setText("Dom4j Tutorials");
/** 类似的完成后两个book */
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "yes");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene Studing");
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "no");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene in Action");
/** 加入owner节点 */
Element ownerElement = booksElement.addElement("owner");
ownerElement.setText("O'Reilly");
try {
/** 将document中的内容写入档案中 */
XMLWriter writer = new XMLWriter(new FileWriter(new java.io.File(
filename)));
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}
return returnValue;
}
/**
* 修改XML档案中内容,并另存为一个新档案 重点掌握dom4j中如何新增节点,修改节点,删除节点
*
* @param filename
* 修改物件档案
* @param newfilename
* 修改后另存为该档案
* @return 返回操作结果, 0表失败, 1表成功
*/
public static int modiXMLFile(String filename, String newfilename) {
int returnValue = 0;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new java.io.File(filename));
/** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */
/** 先用xpath查询物件 */
List list = document.selectNodes("/books/book/@show");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("yes")) {
attribute.setValue("no");
}
}
/**
* 修改内容之二: 把owner项内容改为"测试修改"
* 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点新增一个属性type
*/
list = document.selectNodes("/books/owner");
iter = list.iterator();
if (iter.hasNext()) {
Element ownerElement = (Element) iter.next();
ownerElement.setText("测试修改");
Element dateElement = ownerElement.addElement("date");
dateElement.setText("2008-09-11");
dateElement.addAttribute("type", "日期");
}
/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */
list = document.selectNodes("/books/book");
iter = list.iterator();
while (iter.hasNext()) {
Element bookElement = (Element) iter.next();
Iterator iterator = bookElement.elementIterator("title");
while (iterator.hasNext()) {
Element titleElement = (Element) iterator.next();
if (titleElement.getText().equals("Dom4j Tutorials")) {
bookElement.remove(titleElement);
}
}
}
try {
/** 格式化输出,型别IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML编码 */
format.setEncoding("GBK");
/** 将document中的内容写入档案中 */
XMLWriter writer = new XMLWriter(new FileWriter(new
File(newfilename)),format);
保证编码为UTF-8,支援中文写入
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
newfilename)), format);
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return returnValue;
}
/**
* 格式化XML文件,并解决中文问题
*
* @param filename
* @return
*/
public static int formatXMLFile(String filename) {
int returnValue = 0;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
XMLWriter writer = null;
/** 格式化输出,型别IE浏览一样 */
OutputFormat format = OutputFormat.createPrettyPrint();
/** 指定XML编码 */
format.setEncoding("utf-8");
writer = new XMLWriter(new FileWriter(new File(filename)), format);
writer.write(document);
writer.flush();
writer.close();
/** 执行成功,需返回1 */
returnValue = 1;
} catch (Exception ex) {
returnValue = 0;
ex.printStackTrace();
}
return returnValue;
}
}
这个希望对你有用。。
Q2: 如何将xml文件转变成java对象
首先 java是面向对象的编程语言,所以你要理解面向对象的思想。在这个前提下我们可以理解 文件 本身就是java的对象File,而xml只是File类中对象的一种实例。你可以创建一个File 把你的xml的路径传入这个对象的有参构造,这样就实例化了一个xml文件类的对象
Q3: 请问这句xml代码如何转换java代码
这个属性是隐藏xml代码转换成java的xml代码转换成java,没有对应xml代码转换成java的java接口
public static void setCursorDrawableColor(EditText editText, int color) {
try {
Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
fCursorDrawableRes.setAccessible(true);
int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
Object editor = fEditor.get(editText);
Class? clazz = editor.getClass();
Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
fCursorDrawable.setAccessible(true);
Drawable[] drawables = new Drawable[2];
drawables[0] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
drawables[1] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
fCursorDrawable.set(editor, drawables);
} catch (Throwable ignored) {
}
}
你试试这个方法xml代码转换成java,在stackoverflow上搜出来xml代码转换成java的
Q4: 如何把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和xml转成javabean的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







