首页 \ 问答 \ 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)

在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)

我遇到的情况是我有很多XML,它们是从服务器发送给我的,我使用的是JAXB或任何基于该体系结构的API来构建对象实例。

问题是,我必须在编译时确定要解组的类。 在我看来,我的解决方案是读取传入的XML对象并基于某些标记,我将指示unmrashaller创建指定类的实例。 这种方法会让我有很多IF语句和大型状态机。

有更好的设计模式或方法吗?


I'm in a situation that I have a lot of of XMLs, that are sent to me from a server and I'm using JAXB or any API based on that architecture for building instances of objects.

The problem is, I have to per-determine the class that I want to unmarshall for at compile time. My solution that is in my mind, is to read the incoming XML object and based on some tags, I will direct the unmrashaller to make an instance of the specified class. That approach will let me have a lot of IFs statements and big state machine.

Is there a better design pattern or approach ?


原文:https://stackoverflow.com/questions/17630578
更新时间:2020-11-02 20:11

最满意答案

尝试使用Apache digester 3 ,我认为它可以为你节省很多“if”,并且根本不难使用。

看看这篇文章: http//www.javaworld.com/javaworld/jw-10-2002/jw-1025-opensourceprofile.html


Try using Apache digester 3, I think it can save you lots of "if"s and is not difficult to use at all.

Have a look at this article: http://www.javaworld.com/javaworld/jw-10-2002/jw-1025-opensourceprofile.html

2013-07-13

相关问答

更多

mouseover / mouseout Videojs在运行时共享对象(mouseover/mouseout Videojs Sharing objects at runtime)

这适用于我的铬。 mPlayer = videojs("example_video", {}); mPlayer.controlBar.on("mouseover", function() { console.log("over");}); mPlayer.controlBar.on("mouseout", function() { console.log("out");});` This works for me on chrome. mPlayer = videojs("example_vi ...

在运行时如何将方法绑定到python中的对象?(How do you bind methods to objects in python during runtime?)

您可以使用类型模块中的MethodType : import types obj.f = types.MethodType(f, obj) obj.f() 但你真的需要这个吗? 寻找装饰器(例如),这是向类添加所需功能的更优雅方式。 You can use MethodType from types module: import types obj.f = types.MethodType(f, obj) obj.f() But are you really need th ...

如何在运行时创建对象?(How do I create objects at runtime?)

阅读Java教程中的数组 。 class Spam { public static void main(String[] args) { int n = Integer.valueOf(args[0]); // Declare an array: Foo[] myArray; // Create an array: myArray = new Foo[n]; // Foo[0] through Foo[n - 1] are now ref ...

如何在运行时获取可用的类(How to get available classes at runtime)

我不认为这是可能的,但接近这一点的一种方法是拥有一个唯一的类名列表 - 最简单的是拥有一个全局字典。 您可以通过阅读字典的Keys集合来获取类列表。 我不认为VBScript支持对类的引用,因此当用户选择其中一种类型时,使用Eval创建相应类的实例。 Dim ClassList Set ClassList = CreateObject("Scripting.Dictionary") 'on type selection: Function GetItineraryInstance(classNa ...

在运行时构建一次性方法(Build a disposable method at runtime)

如果您只需要发出一个可以在以后进行垃圾回收的方法,请使用DynamicMethod 。 从文档: 定义并表示可以编译,执行和丢弃的动态方法。 丢弃的方法可用于垃圾收集。 如果需要动态构建类型,则需要为其定义可以收集的动态程序集。 为此,请使用AssemblyBuilderAccess.RunAndCollect选项使用AssemblyBuilder.DefineDynamicAssembly 。 您可以在此处详述的可收集装配中执行一些限制。 Use DynamicMethod if you onl ...

MVC4在运行时构建视图(MVC4 building views at runtime)

这可以通过混合使用T4模板和运行时编译来实现 - 但我不确定是否会推荐它。 我建议的另一条路线是在服务器端生成可以在客户端呈现的JavaScript模板。 那里有各种各样的模板库。 因为您正在使用MVC,所以将控制器中的操作视为可以异步调用的端点并不困难。 This is do-able via a mix of T4 templates and run-time compilation -- but I'm not sure that I would recommend it. Another ...

在运行时构建控件(Building Controls at Runtime)

了解您的具体情况会更有帮助(我们谈论的是哪种选择?) 但是,我猜你可能想要创建一组Panel ,其中包含适当的控件然后根据选项隐藏或显示它们。 It would be helpful to know more about the specifics of your situation (what kind of options are we talking about?) But off the top of my head, I'd guess you probably want to crea ...

在运行时创建XML(Create XML at runtime)

假设您有一个以“allKeyValuePairs”命名的键值对数组,您可以使用以下代码轻松创建发布的XML结构: XElement xmlDocument = new XElement("Customer"); foreach (KeyValuePair<string, string> singlePair in allKeyValuePairs) { xmlDocument.Add(new XElement(singlePair.Key, singlePair.Value)); } ...

在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)

尝试使用Apache digester 3 ,我认为它可以为你节省很多“if”,并且根本不难使用。 看看这篇文章: http : //www.javaworld.com/javaworld/jw-10-2002/jw-1025-opensourceprofile.html Try using Apache digester 3, I think it can save you lots of "if"s and is not difficult to use at all. Have a look ...

在Powershell中在运行时合并JSON对象(Merging JSON Objects at runtime in Powershell)

您的代码中存在几个问题。 首先,插入到模板中的值将插入为字符串而不是json对象。 为此,您可以在模板中使用ConvertTo-json。 我会在一分钟内告诉你。 如果您要在同一个文件中重新创建并使用不同的“模板”(如路径,默认值等),我会创建一个辅助函数,用于在会话变量上重新创建/填充模板(为了避免重复代码)。 创建以下方法: function Get-ParsedJsonTemplate(){ return ($ExecutionContext.InvokeCommand.ExpandS ...

相关文章

更多

最新问答

更多
  • 如何保护Solr只允许SELECT请求给用户并禁止其他任何东西?(How to secure Solr to allow SELECT request to only users and disallow anything else?)
  • XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
  • css3 3D变换不能平滑地制作动画(css3 3D transform doesn't animate smoothly)
  • 运行时错误'91'和Outlook.Application = <对象变量或没有设置块变量>?(Run-time error '91' & Outlook.Application = Object variable or With block variable not set?)
  • 慢的webservice问题(Slow webservice problem)
  • textview的不正确对齐方式(Improper alignment of a textview)
  • 在第一步“Hello World”中出现Java错误(Cannot run “Hello World” program in Eclipse)
  • 为什么十六进制地址是14个字符?(why the hex address is 14 character?)
  • 如何在Python中的不同类中使用变量?(How to use variable in different classes in Python?)
  • asp:GridView HYPERLINKFIELD - datanavigateurlformatstring中的asp代码(asp:GridView HYPERLINKFIELD - asp code inside datanavigateurlformatstring)
  • 关于adaboost算法(About adaboost algorithm)
  • 在Matlab上内置图像(Built in Images on Matlab)
  • java swing:输入键事件时焦点丢失(java swing: Focus lost on enter key event)
  • C#中的通用约束,T是相同的TSomethingElse,对吧?(Generic constraints in C#, T is the same TSomethingElse, right?)
  • 从mybatis中的光标获取数据(Fetching data from cursor in mybatis)
  • 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)
  • 在整个窗口中拉伸sf :: Sprite(Stretch sf::Sprite across entire window)
  • Selenium Node API Web驱动程序等待超时处理程序(Selenium Node API web driver wait timeout handler)
  • 函数使用并且是map的一部分(循环依赖?)(Function uses and is part of map (circular dependency?))
  • 是否可以在C ++ 14中使用可选模板参数创建类型元组?(Is possible to make a tuple of types with optional template parameters in C++14?)
  • PHP从窗帘后面打印/ f(PHP prints /f from behind the curtains)
  • JFrame的contentPane的LayoutManager(LayoutManager of JFrame's contentPane)
  • 用于Instagram Feed的图像滚动(Image Roll Overs for Instagram Feed)
  • 如何显示拉伸字体(双倍宽度/高度)?(How to display stretched font (double width/height)?)
  • 文件操作API在fileapi.h和stdio.h中的WP8差异?(WP8 differences between file manipulation APIs in fileapi.h and stdio.h?)
  • 保存失败后Rails没有回滚事务()(Rails not rolling back transaction after failed save())
  • jqgrid中的分页问题与数组数据(Pagination problem in jqgrid with array data)
  • 重定向时,通过其他页面上的URL调用javascript函数(Call javascript function through url on otherpage while Redirecting)
  • 如何使用InvokeCommandAction调用我的方法并传入参数?(How do I go about using InvokeCommandAction to call a method of mine and pass in parameters?)
  • Jquerymobile按钮仅显示页面的第一个外观(Jquerymobile buttons are shown only first apperance of the page)