【问题标题】:Dynamic creation of classes in Java [duplicate]Java中类的动态创建[重复]
【发布时间】:2012-09-29 01:18:55
【问题描述】:

可能重复:
Dynamically create classes in Java

我对 Java 中的反射概念有疑问。

我正在尝试用 Java 创建一个 SAX XML 解析器。需要做的是我需要根据 XML 创建一个包含字段的新类,并在解析时使用该类。 但是这种方法将非常特定于所选的 XML。

我正在思考的是,是否有任何方法可以编写适用于所有可能 XML 的 XML (SAX) 解析器?即,我需要动态创建一个包含在 XML 中的字段的类,并使用同一个类来解析 XML 文件。

我希望我能清楚地提出我的问题。

谢谢。

【问题讨论】:

  • @galuano1 哦.. 不,谢谢你的想法.. 我现在会努力解决这个问题。

标签: java dynamic reflection xml-parsing


【解决方案1】:

我之前也遇到过类似的情况,但是我的 xml 解析器需要一些配置。 我的方法是:a)解析引擎,b)配置。

配置部分围绕 XPath 表达式构建,以通过属性传递。 这些是静态 XPath 表达式,如果输入 xml 消息发生更改,则需要更新。

解析引擎部分执行这些表达式来查询 xml 元素、属性等以填充 java 对象。

编辑:

例如,给定的 xml(简化,无命名空间):

<msg>
    <something>
        <somenode>
            <version>1.0.0</version>
        </somenode>
    </something>
</msg>

代码示例:(简化)

String myXpExpr = "//version/text()";  // make it .properties
Document xmlDocument = DocumentBulderFactory.newInstance().newDocumentBuilder().parse(xmlInputStream);
XPath xpXPath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpXPath.compile(myXpExpr);
resultObject = expr.evaluate(xmlDocument, returnTypeQName); 

这会给你“1.0.0”作为结果对象。

【讨论】:

  • 好的..您是否能够使用 SAX XML 解析 API 或需要转移到 JAXB 或其他一些 API?
  • 我使用的是 XPath 表达式。没有 SAX、JAXB 或 JIBX。
  • 用示例更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2016-10-24
  • 2011-04-16
  • 2015-04-23
  • 2017-04-17
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多