可能重复:
在 Java 中动态创建类
我对 Java 中的反射概念有疑问。
我正在尝试用 Java 创建一个 SAX XML 解析器。需要做的是我需要根据 XML 创建一个包含字段的新类,并在解析时使用该类。但是这种方法将非常特定于所选的 XML。
我正在思考的是,是否有任何方法可以编写适用于所有可能 XML 的 XML (SAX) 解析器?即,我需要动态创建一个包含在 XML 中的字段的类,并使用同一个类来解析 XML 文件。
我希望我能清楚地提出我的问题。
谢谢。
可能重复:
在 Java 中动态创建类
我对 Java 中的反射概念有疑问。
我正在尝试用 Java 创建一个 SAX XML 解析器。需要做的是我需要根据 XML 创建一个包含字段的新类,并在解析时使用该类。但是这种方法将非常特定于所选的 XML。
我正在思考的是,是否有任何方法可以编写适用于所有可能 XML 的 XML (SAX) 解析器?即,我需要动态创建一个包含在 XML 中的字段的类,并使用同一个类来解析 XML 文件。
我希望我能清楚地提出我的问题。
谢谢。
我之前也遇到过类似的情况,但是我的 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”作为结果对象。