从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 . newInstance(args) ,我们已经明白这里使用了 反射创建 View 对象 。
而对于 Android 内置的各种 View, 我们在 LayoutInflater 的实现类PhoneLayoutInflater 中找到了重载
再看下 LayoutInflater 中的代码
我们可以看到, 对于系统内置的 View,会依次在 View 的标签前面加上
"android.widget."、"android.webkit."、"android.app." 、"android.view."
然后通过 反射 的方法 创建 View。
(文章略有删减,可点击原文查看~)
到此,Xml 到 View 对象的转换过程全部结束~~~
看到这里的童鞋很辛苦!这项技能get了吗?
近期文章:
今日问题:
谁能来画个过程图?
画出来有信心的丢到码仔的学习群来 , 码仔给你发红包!
快来码仔社群解锁新姿势吧!社群升级:Max你的学习效率
怎样将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
【xml代码转换成java xml转成javabean】/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 = https://www.04ip.com/post/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 = https://www.04ip.com/post/1;
} catch (Exception ex) {
returnValue = https://www.04ip.com/post/0;
ex.printStackTrace();
}
return returnValue;
}
/**
* 修改XML档案中内容,并另存为一个新档案 重点掌握dom4j中如何新增节点,修改节点,删除节点
*
* @param filename
* 修改物件档案
* @param newfilename
* 修改后另存为该档案
* @return 返回操作结果, 0表失败, 1表成功
*/
public static int modiXMLFile(String filename, String newfilename) {
int returnValue = https://www.04ip.com/post/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 = https://www.04ip.com/post/1;
} catch (Exception ex) {
returnValue = https://www.04ip.com/post/0;
ex.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return returnValue;
}
/**
* 格式化XML文件,并解决中文问题
*
* @param filename
* @return
*/
public static int formatXMLFile(String filename) {
int returnValue = https://www.04ip.com/post/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 = https://www.04ip.com/post/1;
} catch (Exception ex) {
returnValue = https://www.04ip.com/post/0;
ex.printStackTrace();
}
return returnValue;
}
}
这个希望对你有用 。。
如何将xml文件转变成java对象首先 java是面向对象的编程语言 , 所以你要理解面向对象的思想 。在这个前提下我们可以理解 文件 本身就是java的对象File,而xml只是File类中对象的一种实例 。你可以创建一个File把你的xml的路径传入这个对象的有参构造,这样就实例化了一个xml文件类的对象
请问这句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的
如何把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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 如何孵化新媒体人才队伍,新媒体人才队伍建设
- chatgpt写论文怎么用,论文track
- ios恢复删除微信好友吗,ios微信消息删除怎么恢复
- excel新技巧直播,直播表格脚本范文
- mysql怎么筛选数据 mysql筛选数据将时间超过800的数据转换为700
- 移动硬盘怎么调显示分区,移动硬盘怎么分配盘符
- python网络爬虫带gui界面,python 网络爬虫权威指南
- 窗帘新人直播技巧,窗帘直播主题
- python阶梯电价函数 python 梯度计算