当前位置: 首页 > 知识库问答 >
问题:

如何用JAXB解组包含混合标签(有属性,有嵌套标签的内容值)的XML文件?

西门嘉澍
2023-03-14

我需要将 xml 文件转换为 Java 对象。

<PRODUCT id="10" name="Notebook">
    <VALUE id="30" type="Formatted">This is mixed <TUNIT style="style-12">formatted</TUNIT> text value.</VALUE>
</PRODUCT>

这是产品类别:

@Getter
@Setter
@XmlRootElement(name = "PRODUCT")
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {

    @XmlAttribute(name = "id")
    private String id;

    @XmlAttribute(name = "name")
    private String name;

    @XmlElementRef(name = "VALUE")
    private Value value;
}

这是值类:

@Getter
@Setter
@XmlRootElement(name = "VALUE")
@XmlAccessorType(XmlAccessType.FIELD)
public class Value {

    @XmlAttribute(name = "id")
    private String id;

    @XmlAttribute(name = "type")
    private String type;

    @XmlValue
    private String content;

    @XmlElementRef(name = "TUNIT")
    private Tunit tunit;
}

这里是Tunit类:

@Getter
@Setter
@XmlRootElement(name = "TUNIT")
@XmlAccessorType(XmlAccessType.FIELD)
public class Tunit {

    @XmlAttribute(name = "style")
    private String style;

    @XmlValue
    private String content;
}

当我设置@XmlAttribute

如果类具有@XmlElement属性,则它不能具有@XmlValue属性。

可以用JAXB解组这个xml吗?


共有1个答案

云京
2023-03-14

在您的

因此,在 Value 类中,您需要定义一个列表

对于包含XML片段的XML示例
这是混合的

  • 字符串“这是混合的”
  • 图尼特对象
  • 字符串“文本值”。

因此,类最终将如下所示

@XmlRootElement(name = "VALUE")
@XmlAccessorType(XmlAccessType.FIELD)
public class Value {

    @XmlAttribute(name = "id")
    private String id;

    @XmlAttribute(name = "type")
    private String type;

    @XmlMixed
    @XmlElementRef(name = "TUNIT", type = Tunit.class)
    private List<Object> content;
}

 类似资料:
  • 问题内容: 考虑这个例子- 我有一个称为Report的类,该类具有Message类型的字段。Message类具有一个称为“ body”的字段,该字段是一个字符串。“ body”可以是任何字符串, 但有时包含格式正确的XML内容 。如何确保当“正文”包含XML内容时,序列化采用XML结构的形式而不是当前的结构? 这是带有输出的代码- 报告 类别 讯息 类别 主要 输出如下- 如您在上面的输出中看到的

  • 问题内容: 我有一个如下形式的XML: 如何使用JAXB批注将所有内容映射到String值。 那呢 问题答案: 您可以使用注释并指定一个DOMHandler来将DOM片段与String值相互转换。 举一个完整的例子 http://blog.bdoughan.com/2011/04/xmlanyelement-and-non-dom-properties.html

  • 模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套。 系统内置的标签中,volist、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。例如: <volist name="list" id="vo"> <volist name="vo['

  • 请参考:http://www.kancloud.cn/manual/thinkphp/1817

  • 模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套。 系统内置的标签中,volist、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。例如: <volist name="list" id="vo"> <volist name="vo['

  • 模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套。 系统内置的标签中,volist、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。例如: {volist name="list" id="vo"} {volist name="vo['