问题
<main> <name>JET</name> <maxInstances>5</maxInstances> <parameters> <a>1</a> <b> <b1>test1</b1> <b2>test2</b2> </b> </parameters> </main>
我需要提取name和maxInstances元素的值,然后提取参数元素的整个内部文本.例如
name = "JET" maxInstances = 5 parameters = "<a>1</a><b><b1>test1</b1><b2>test2</b2></b>"
最终,参数块可以包含任何格式良好的XML.
试图解决方案
以下代码适用于name和maxInstances,但不适用于参数:
@XmlRootElement(name="main") public class Main { @XmlElement(name="name",required="true") private String name; @XmlElement(name="maxInstances",required="true") private Integer maxInstances; @XmlElement(name="parameters") private String parameters; }
我已经尝试过基于以下想法的解决方案,但找不到合适的东西.
我可以使用不同的类型来表示我可以解析以生成字符串的XML树的参数对象吗?例如
@XmlElement(name="parameters") private XmlNodeObject parametersNode; public String getParameters() { // Collapse node to single line of text return innerText; }
或者我需要使用一些不同类型的注释?
@XmlSpecialAnnotation(...) @XmlElement(name="parameters") private String parameters;
我是否需要切换到不同风格的解析器?使用两种解析器样式是好/坏的想法?
最接近的是通过将变量声明为org.w3c.dom.Node,将“参数”映射到DOM树. (实际上,声明一个JAXBElement).
原文链接:https://www.f2er.com/xml/292513.html有关详细信息,请参阅http://jaxb.java.net/guide/Avoid_strong_databinding.html.这为您提供了架构优先处方,您可以通过xsd2java运行该架构并查看输出,了解如何从java启动.
要获取字符串,您必须从DOM序列化.
或者,更具体地说:
this page here describes xsd:any processing,and thus
@XmlAnyElement public List<Element> getParameters();
其中Element是DOM接口.