首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >引用部分解组

引用部分解组
EN

Stack Overflow用户
提问于 2013-09-04 08:34:22
回答 2查看 197关注 0票数 1

我在解析以下xml时遇到了困难:

代码语言:javascript
运行
复制
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3">
  <Study OID="CDASH_Study_2011-10-24">
    <GlobalVariables>
        <StudyName>CDASH</StudyName>
        <StudyDescription>CDASH Publication</StudyDescription>
        <ProtocolName>CDASH</ProtocolName>
    </GlobalVariables>        
    <MetaDataVersion OID="CDASH_MetaDataVersion_2011-10-24" Name="CDASH MDV">
        <FormDef OID="F.AE_2011-10-24" Name="Adverse Event" Repeating="No">
            <ItemGroupRef ItemGroupOID="IG.AEYN_2011-10-24" Mandatory="Yes"/>
        </FormDef>
        <ItemGroupDef OID="IG.AEYN_2011-10-24" Name="General information" Repeating="No">
            <ItemRef ItemOID="AE_1_2011-10-24" Mandatory="Yes"/>
        </ItemGroupDef>
        <ItemDef OID="AE_1_2011-10-24" Name="Any AEs?" DataType="text" Length="1">
            <Description>
                <TranslatedText xml:lang="en">General prompt question...</TranslatedText>
            </Description>
            <Question>
                <TranslatedText xml:lang="en">Any AEs?</TranslatedText>
            </Question>                
            <Alias Context="CDASH" Name="AEYN"/>
        </ItemDef>
    </MetaDataVersion>
  </Study>
</ODM>

如您所见,XML使用一种扁平树,其中FormDef元素包含ItemGroupRef元素,OID引用存储在与FormDefs (MetaDataVersion)相同级别的ItemGroupDef元素。当然,我可以自己解析它,构建索引映射,然后根据需要将所有生成的类链接到一起,但是我想知道JAXB是否能够支持它本身。

我还想在不为我不感兴趣的元素创建JAXB注释类的情况下解除数据的编组。在我的特殊情况下,我只对MetaDataVersion元素的内容感兴趣。我尝试使用FormDef类进行简单的解组,但这会引发以下异常:

代码语言:javascript
运行
复制
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.cdisc.org/ns/odm/v1.3", local:"ODM"). Expected elements are <{http://www.cdisc.org/ns/odm/v1.3}Study>

有什么想法吗?

非常感谢

一个

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-04 09:29:55

用于根标记<OMD>

代码语言:javascript
运行
复制
@XmlRootElement(name = "ODM")
@XmlAccessorType(XmlAccessType.FIELD)
public class ODMTag
{
   @XmlElement(name = "Study", namespace = "http://www.cdisc.org/ns/odm/v1.3")
   StudyTag study;
}  

用于子标记<Study>

代码语言:javascript
运行
复制
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class StudyTag 
{
   @XmlAttribute(name = "OID")
   String OID;

   @XmlElement(namespace = "http://www.cdisc.org/ns/odm/v1.3")
   MetaDataVersion MetaDataVersion;
}  

用于标记<MetaDataVersion>

代码语言:javascript
运行
复制
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class MetaDataVersion 
{
   @XmlAttribute(name = "OID")
   String OID;

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

   /** 
    * all other elements
    */
}  

解编组:

代码语言:javascript
运行
复制
   ODMTag odm = JAXB.unmarshal(new File(...), ODMTag.class)
票数 0
EN

Stack Overflow用户

发布于 2013-09-04 09:52:23

您可以在XML上创建StAX XMLStreamReader。然后将XMLStreamReader提升到MetaDataVersion元素并从那里解封。

  • http://blog.bdoughan.com/2012/08/handle-middle-of-xml-document-with-jaxb.html
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18609024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档