【问题标题】:how to define XSD for a XML with optional element如何为带有可选元素的 XML 定义 XSD
【发布时间】:2013-09-03 17:13:14
【问题描述】:

我有一个这样的xml

<datapoint>
   <fieldname>somestring</fieldname>
   <value>some string</value>
</datapoint>
<datapoint>
   <fieldname>somestring</fieldname>
   <value>some string</value>
</datapoint>
<datapoint>
   <fieldname>somestring</fieldname>
   <value>
       <filename>some string</filename>
   </value>
</datapoint>

我需要为此 XML 定义 XSD。我使用 value 作为复杂类型。但是当我将值用作复杂类型时,我无法从 JAXB 中的值解析字符串值。我只得到一个对象。如果我将值声明为简单类型(字符串),我将无法读取文件名。我该怎么办..请帮忙。

【问题讨论】:

标签: xml jaxb xsd xsd-validation


【解决方案1】:

通过在定义中包含 minOccurs="0" 将 XML 元素标记为可选。


我使用 value 作为复杂类型。但是当我将值用作复杂类型时 无法从 JAXB 中的 Value 解析字符串值

如果您只是定义复杂类型,那么您需要将相应的类传递给 unmarshal 方法:

Datapoint datapoint = unmarshaller.unmarshal(xml, Datapoint.class).getValue();

如果为复杂类型定义全局元素,则不需要使用类参数。如果您定义一个引用命名复杂类型的全局元素,您将返回一个 JAXBElement&lt;Datapoint&gt; 的实例,如果您定义一个具有匿名类型的全局元素,您将返回一个 Datapoint 的实例。

【讨论】:

  • 我能够以 object(List) 的形式获得价值。它适用于 somestringsome string 但是当我有 时我无法读取字符串值somestringsome string
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2015-08-19
  • 2015-12-24
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多