加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用JAXB提取XML元素的内部文本

发布时间:2020-12-16 07:47:45 所属栏目:百科 来源:网络整理
导读:问题 给定以下XML配置文件: main nameJET/name maxInstances5/maxInstances parameters a1/a b b1test1/b1 b2test2/b2 /b /parameters/main 我需要提取name和maxInstances元素的值,然后提取参数元素的整个内部文本.例如 name = "JET"maxInstances = 5parame
问题

给定以下XML配置文件:

<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).

有关详细信息,请参阅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接口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读