使用JAXB封送只能包含多个子节点类型之一的XML节点(SharePoint查询)

戴夫

我正在尝试创建带有JAXB注释的类,以基于Microsoft SharePoint Query架构生成XML 我有一SpWhereClause堂课:

@XmlType(name="Where")
@XmlAccessorType(XmlAccessType.FIELD)
public class SpWhereClause {

}

但是我不确定如何构造/注释其属性。一个<Where>元素可以有许多不同类型的子元素(<Eq><BeginsWith><Contains>等让我们忽略<And><Or>现在),但不超过一个。Eq并且BeginsWith分别是的单独有效子代Where,但不能这样:

<Where>
    <Eq>...</Eq>
    <BeginsWith>...</BeginsWith>
</Where>

而不元素中嵌套<Eq><BeginsWith><Or>

我的第一个想法是AbstractSpComparison使用所有比较共用<FieldRef><Value>元素创建一个

@XmlAccessorType(XmlAccessType.FIELD)
public abstract class AbstractSpComparison {

    @XmlElement
    private SpFieldRef fieldRef;

    @XmlElement
    private SpValue value;

    ...
}

然后SpEqualsComparison扩展它:

@XmlType(name="Eq")
public class SpEqualsComparison extends AbstractSpComparison {

}

但是,在中使用abstract类SpWhereClause使我无法控制子元素的名称。这个:

@XmlElement
private AbstractSpComparison comparison;

结果:

<Where>
    <comparison>...</comparison>
</Where>

代替这个:

<WHERE>
    <Eq>...</Eq>
</WHERE>

为什么不使用“ Eq”名称SpEqualsComparison来命名比较元素?处理这种情况的正确方法是什么?

我考虑过将所有可能的子元素类型都作为的属性SpWhereClause,并且只设置我需要的子元素类型(在某处带有一些验证逻辑),但这似乎不必要地冗长。

如果有关系,我正在使用Spring OXM Jaxb2Marshaller

博多安

您可以执行几种不同的选择:

选项1 - @XmlElementRef

如果所有内容都扩展了一个公共的超类(即AbstractSpComparison),则可以利用@XmlElementRef注释。执行此操作时,子元素将与@XmlRootElement所引用对象的类上的注释的值相对应

@XmlElementRef
private AbstractSpComparison comparison;

想要查询更多的信息

我在博客上写了更多有关此方法的信息:

选项#2- @XmlElements

如果一切都没有扩展一个公共的超类,那么您可以利用@XmlElements注释,在其中显式注释哪些元素可能出现以及它们对应的类是什么:

@XmlElements({
    @XmlElement(name="Eq", type=Eq.class),
    @XmlElement(name="BeginsWith", type=BeginsWith.class)
})
private AbstractSpComparison comparison;

想要查询更多的信息

我在博客上写了更多有关此方法的信息:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

密码查询以返回每个子节点之一

来自分类Dev

使用xslt将父节点添加到XML的一个或多个子节点

来自分类Dev

可以使用JAXB(或JAXB + StAX)封送XML的一部分吗?

来自分类Dev

使用expat在TCL中解析XML的多个子节点

来自分类Dev

Xpath 查询循环多个子节点

来自分类Dev

通过多个子节点的值选择一个XML节点

来自分类Dev

读取具有多个子节点的xml文件只会返回第一个节点

来自分类Dev

使用edittext返回xml中包含查询词的xml节点

来自分类Dev

JS:使用for循环删除多个子节点?

来自分类Dev

使用replaceChild时替换多个子节点

来自分类Dev

sql server 在一个查询中使用多个节点粉碎 xml

来自分类Dev

CefSharp不会封送DOM节点

来自分类Dev

XML返回所有节点名称包含一个子字符串

来自分类Dev

XML返回所有节点名称包含一个子字符串

来自分类Dev

使用XPath获取节点的每个子节点的第一个子节点

来自分类Dev

用xml中的多个位置替换一个子节点值

来自分类Dev

使用Java DOM解析器标记XML输出-多个子节点值

来自分类Dev

如何使用带有多个子节点的sql将表数据转换为xml格式

来自分类Dev

如何使用带有多个子节点的sql将表数据转换为xml格式

来自分类Dev

Xml Nullable行和多个子节点的列表

来自分类Dev

XStream:如何在封送的XML中隐藏2个不必要的父节点?

来自分类Dev

通过带有多个父节点和多个子节点的OpenXML解析XML

来自分类Dev

JAXB-使用xsi:type封送

来自分类Dev

无法使用JAXB封送XBRL实例

来自分类Dev

无法使用JAXB封送XBRL实例

来自分类Dev

EnumerateChildNodesWithName中的多个子节点

来自分类Dev

仅在一个子节点中使用xmlstarlet编辑XML

来自分类Dev

如何使用beautifulsoup将具有多个子节点的父节点和子节点信息提取到一个数据帧中?

来自分类Dev

对于具有两个父节点和多个子节点的XML结构?

Related 相关文章

  1. 1

    密码查询以返回每个子节点之一

  2. 2

    使用xslt将父节点添加到XML的一个或多个子节点

  3. 3

    可以使用JAXB(或JAXB + StAX)封送XML的一部分吗?

  4. 4

    使用expat在TCL中解析XML的多个子节点

  5. 5

    Xpath 查询循环多个子节点

  6. 6

    通过多个子节点的值选择一个XML节点

  7. 7

    读取具有多个子节点的xml文件只会返回第一个节点

  8. 8

    使用edittext返回xml中包含查询词的xml节点

  9. 9

    JS:使用for循环删除多个子节点?

  10. 10

    使用replaceChild时替换多个子节点

  11. 11

    sql server 在一个查询中使用多个节点粉碎 xml

  12. 12

    CefSharp不会封送DOM节点

  13. 13

    XML返回所有节点名称包含一个子字符串

  14. 14

    XML返回所有节点名称包含一个子字符串

  15. 15

    使用XPath获取节点的每个子节点的第一个子节点

  16. 16

    用xml中的多个位置替换一个子节点值

  17. 17

    使用Java DOM解析器标记XML输出-多个子节点值

  18. 18

    如何使用带有多个子节点的sql将表数据转换为xml格式

  19. 19

    如何使用带有多个子节点的sql将表数据转换为xml格式

  20. 20

    Xml Nullable行和多个子节点的列表

  21. 21

    XStream:如何在封送的XML中隐藏2个不必要的父节点?

  22. 22

    通过带有多个父节点和多个子节点的OpenXML解析XML

  23. 23

    JAXB-使用xsi:type封送

  24. 24

    无法使用JAXB封送XBRL实例

  25. 25

    无法使用JAXB封送XBRL实例

  26. 26

    EnumerateChildNodesWithName中的多个子节点

  27. 27

    仅在一个子节点中使用xmlstarlet编辑XML

  28. 28

    如何使用beautifulsoup将具有多个子节点的父节点和子节点信息提取到一个数据帧中?

  29. 29

    对于具有两个父节点和多个子节点的XML结构?

热门标签

归档