当前位置: 首页 > news >正文

网站纯色背景图怎么做江苏网站seo

网站纯色背景图怎么做,江苏网站seo,网站备案复查 手机号码打不通,东莞市视频直播网站开发xstream xml模板有时候#xff0c;我们不得不处理XML数据。 而且大多数时候#xff0c;这不是我们一生中最快乐的一天。 甚至有一个术语“ XML地狱”描述了程序员必须处理许多难以理解的XML配置文件时的情况。 但是#xff0c;不管喜欢与否#xff0c;有时我们别无选择我们不得不处理XML数据。 而且大多数时候这不是我们一生中最快乐的一天。 甚至有一个术语“ XML地狱”描述了程序员必须处理许多难以理解的XML配置文件时的情况。 但是不管喜欢与否有时我们别无选择这主要是因为客户端的说明中提到了诸如“使用以XML文件编写的配置”之类的内容。 在这种情况下 XStream附带了非常酷的功能使处理XML的痛苦减轻了。 总览 XStream是一个小型库用于在Java对象和XML之间序列化数据。 它重量轻体积小具有出色的API最重要的是它可以与自定义注释一起使用也可以不包含不属于Java类所有者的自定义注释。 第一个例子 假设我们需要从xml文件加载配置 configinputFile/Users/tomek/work/mystuff/input.csv/inputFiletruststoreFile/Users/tomek/work/mystuff/truststore.ts/truststoreFilekeystoreFile/Users/tomek/work/mystuff/CN-user.jks/keystoreFile!-- ssl stores passwords--truststorePasswordpassword/truststorePasswordkeystorePasswordpassword/keystorePassword!-- user credentials --useruser/userpasswordsecret/password /config 我们想将其加载到Configuration对象中 public class Configuration {private String inputFile;private String user;private String password;private String truststoreFile;private String keystoreFile;private String keystorePassword;private String truststorePassword;// getters, setters, etc. } 因此基本上我们要做的是 FileReader fileReader new FileReader(config.xml); // load our xml file XStream xstream new XStream(); // init XStream// define root alias so XStream knows which element and which class are equivalentxstream.alias(config, Configuration.class); Configuration loadedConfig (Configuration) xstream.fromXML(fileReader); 仅此而已 更严重的事情 好的但是前面的示例非常基础因此现在让我们做些更复杂的事情由真实WebService返回的真实XML。 DATA xmlnsBANUPDATED_AT2013-03-09/UPDATED_ATTROUBLEMAKERNAME1JOHN/NAME1NAME2EXAMPLE/NAME2AGE24/AGENUMBERASD123123/NUMBER/TROUBLEMAKER/BANBANUPDATED_AT2012-03-10/UPDATED_ATTROUBLEMAKERNAME1ANNA/NAME1NAME2BAKER/NAME2AGE26/AGENUMBERAXN567890/NUMBER/TROUBLEMAKER/BANBANUPDATED_AT2010-12-05/UPDATED_ATTROUBLEMAKERNAME1TOM/NAME1NAME2MEADOW/NAME2NUMBERSGH08945/NUMBERAGE48/AGE/TROUBLEMAKER/BAN /DATA 我们这里提供的是用XML编写的简单禁令清单。 我们希望将其加载到Ban对象的集合中。 因此让我们准备一些类省略getters / setters / toString public class Data {private List bans new ArrayList(); }public class Ban {private String dateOfUpdate;private Person person; }public class Person {private String firstName;private String lastName;private int age;private String documentNumber; } 如您所见XML和Java类之间存在一些命名和类型不匹配的问题例如字段名1- firstNamedateOfUpdate是String而不是Date但这是出于某些示例目的。 因此这里的目标是解析XML并使用包含正确数据的Ban实例的填充集合来获取Data对象。 让我们看看如何实现它。 解析注释 首先更简单的方法是使用注释。 这是在我们可以修改将XML映射到的Java类的情况下的建议方法。 因此我们有 XStreamAlias(DATA) // maps DATA element in XML to this class public class Data {// Here is something more complicated. If we have list of elements that are // not wrapped in a element representing a list (like we have in our XML: // multiple ban elements not wrapped inside bans collection, // we have to declare that we want to treat these elements as an implicit list // so they can be converted to List of objects. XStreamImplicit(itemFieldName ban) private List bans new ArrayList(); }XStreamAlias(BAN) // another mapping public class Ban {/*We want to have different field names in Java classes sowe define what element should be mapped to each field*/XStreamAlias(UPDATED_AT) // private String dateOfUpdate;XStreamAlias(TROUBLEMAKER)private Person person; }XStreamAlias(TROUBLEMAKER) public class Person {XStreamAlias(NAME1)private String firstName;XStreamAlias(NAME2)private String lastName;XStreamAlias(AGE) // String will be auto converted to int valueprivate int age;XStreamAlias(NUMBER)private String documentNumber; 实际的解析逻辑非常简短 FileReader reader new FileReader(file.xml); // load fileXStream xstream new XStream();xstream.processAnnotations(Data.class); // inform XStream to parse annotations in Data classxstream.processAnnotations(Ban.class); // and in two other classes... xstream.processAnnotations(Person.class); // we use for mappingsData data (Data) xstream.fromXML(reader); // parse// Print some data to console to see if results are correctSystem.out.println(Number of bans data.getBans().size());Ban firstBan data.getBans().get(0);System.out.println(First ban firstBan.toString()); 如您所见注释非常易于使用因此最终代码非常简洁。 但是在无法修改映射类的情况下该怎么办 我们可以使用不需要对表示XML数据的Java类进行任何修改的其他方法。 解析无注释 当我们无法用注解充实我们的模型类时还有另一种解决方案。 我们可以使用XStream对象的方法定义所有映射细节 FileReader reader new FileReader(file.xml); // three first lines are easy, XStream xstream new XStream(); // same initialisation as in the xstream.alias(DATA, Data.class); // basic example abovexstream.alias(BAN, Ban.class); // two more aliases to map... xstream.alias(TROUBLEMAKER, Person.class); // between node names and classes// We want to have different field names in Java classes so// we have to use aliasField(fieldInXml, mappedJavaClass, mappedFieldInJavaClass)xstream.aliasField(UPDATED_AT, Ban.class, dateOfUpdate); xstream.aliasField(TROUBLEMAKER, Ban.class, person);xstream.aliasField(NAME1, Person.class, firstName);xstream.aliasField(NAME2, Person.class, lastName);xstream.aliasField(AGE, Person.class, age); // notice here that XML will be auto-converted to int agexstream.aliasField(NUMBER, Person.class, documentNumber);/*Another way to define implicit collection*/ xstream.addImplicitCollection(Bans.class, bans);Data data (Data) xstream.fromXML(reader); // do the actual parsing// lets print results to check if data was parsedSystem.out.println(Number of bans data.getBans().size());Ban firstBan data.getBans().get(0);System.out.println(First ban firstBan.toString()); 如您所见XStream允许轻松地将更复杂的XML结构转换为Java对象如果XML不能满足我们的需求它还可以通过使用不同的名称来调整结果。 但是有一件事情应该引起您的注意我们正在将表示Date的XML转换为原始String这与我们想要的结果不完全相同。 这就是为什么我们将添加转换器来为我们做一些工作的原因。 使用现有的自定义类型转换器 XStream库附带了一组针对大多数常见用例的内置转换器。 我们将使用DateConverter。 所以现在我们班的班级看起来像这样 public class Ban {private Date dateOfUpdate;private Person person; } 要使用DateConverter我们只需将其注册为我们希望出现在XML数据中的日期格式即可 xstream.registerConverter(new DateConverter(yyyy-MM-dd, new String[] {})); 就是这样。 现在我们的对象不是String而是填充了Date实例。 酷又容易 但是现有转换器未涵盖的类和情况又如何呢 我们可以自己写。 从头开始编写自定义转换器 假设我们想知道多少天前完成更新而不是dateOfUpdate public class Ban {private int daysAgo;private Person person; } 当然我们可以为每个Ban对象手动计算它但是使用可以为我们完成这项工作的转换器看起来会更有趣。 我们的DaysAgoConverter必须实现Converter接口因此我们必须实现三种带有签名的方法这些方法看起来有些吓人 public class DaysAgoConverter implements Converter {Overridepublic void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {}Overridepublic Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {}Overridepublic boolean canConvert(Class type) {return false;} } 最后一个很容易因为我们将只转换Integer类。 但是这些HierarchicalStreamWriter仍然剩下两种方法MarshallingContextHierarchicalStreamReader和UnmarshallingContext参数。 幸运的是我们可以通过使用AbstractSingleValueConverter避免与它们打交道它使我们免受如此低级的机制的攻击。 现在我们的班级看起来好多了 public class DaysAgoConverter extends AbstractSingleValueConverter {Overridepublic boolean canConvert(Class type) {return type.equals(Integer.class);}Overridepublic Object fromString(String str) {return null;}public String toString(Object obj) {return null;} } 另外我们必须重写AbstractSingleValueConverter中定义的toStringObject obj方法因为我们要将Date存储在从Integer计算的XML中而不是简单的Object.toString值该值将从抽象父级中定义的默认toString返回。 实作 下面的代码非常简单但是大多数有趣的行都被注释了。 我跳过了所有验证内容以简化此示例。 public class DaysAgoConverter extends AbstractSingleValueConverter {private final static String FORMAT yyyy-MM-dd; // default Date format that will be used in conversionprivate final DateTime now DateTime.now().toDateMidnight().toDateTime(); // current day at midnightpublic boolean canConvert(Class type) {return type.equals(Integer.class); // Converter works only with Integers}Overridepublic Object fromString(String str) {SimpleDateFormat format new SimpleDateFormat(FORMAT);try {Date date format.parse(str);return Days.daysBetween(new DateTime(date), now).getDays(); // we simply calculate days between using JodaTime} catch (ParseException e) {throw new RuntimeException(Invalid date format in str);}}public String toString(Object obj) {if (obj null) {return null;}Integer daysAgo ((Integer) obj);return now.minusDays(daysAgo).toString(FORMAT); // here we subtract days from now and return formatted date string} } 用法 要将自定义转换器用于特定字段我们必须使用registerLocalConverter通知它XStream对象 xstream.registerLocalConverter(Ban.class, daysAgo, new DaysAgoConverter()); 我们使用“本地”方法将此转换仅应用于特定字段而不应用于XML文件中的每个Integer字段。 之后我们将使用天数而不是日期填充Ban对象。 摘要 这就是我想在这篇文章中向您展示的全部内容。 现在您已经掌握了XStream的功能以及如何使用它轻松将XML数据映射到Java对象的基本知识。如果您需要更高级的内容请查看项目官方页面因为它包含了很好的文档和示例。 参考 XStream –来自Code Hard Go Pro博客的JCG合作伙伴 Tomasz Dziurko的XStreamely 简单方法可使用Java处理XML数据 。 翻译自: https://www.javacodegeeks.com/2013/04/xstream-xstreamely-easy-way-to-work-with-xml-data-in-java.htmlxstream xml模板
http://wiki.neutronadmin.com/news/253615/

相关文章:

  • 怎么做饲料电商网站资格证网站怎么做
  • 网站安全制度体系的建设情况如何免费建造网站
  • 湘潭自助建站系统申请免费空间
  • 基础网站建设熵网站
  • 在线图片编辑器官网网站建设 网站优化
  • 徐州泉山区建设局网站做外贸主要在那些网站找单
  • 信息管理的基本原理分析网站建设北京电力交易中心主任
  • 经典企业网站天津建筑网站建设
  • 网站对应的ip中国摄影网站
  • 新网站排名优化携程网站用js怎么做
  • 创新型的网站建设j网站开发的相关知识
  • 湖北长欣建设有限公司网站学校网站建设的必要性
  • 惠阳网站建设公司wordpress博客站点
  • 凌云县 城市建设 网站广告设计与制作用什么软件
  • 网站建设图片排版外管局网站做延期收款报告
  • 呼和浩特商城网站建设番禺学校网站建设建议
  • 可以做系统同步时间的网站淘宝客网站搜索怎么做
  • apple 官网网站模板酒店seo是什么意思
  • 台州网站建设优化内蒙建设厅网站
  • 网站免费正能量不用下载在原备案号下增加新网站
  • 可以做网站的公司有哪些项目建设目标怎么写
  • 户外网站 整站下载网站开发目录结构
  • 深圳北网站建设众筹网站开发成本
  • 潜江网站开发公众号小程序免费开通
  • 怀柔富阳网站建设企业联系电话
  • 网站域名被注销托管经营
  • 网站开发脚本解析器百度公司好进吗
  • 北京网站建设的服务用手机域名做网站有多少
  • 如何推广网站网站推广常用方法上海建交人才网官网
  • 乐清网站优化推广广州市南沙住房和建设局网站