Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xml解组问题_Java_Xml_Jaxb_Unmarshalling - Fatal编程技术网

Java xml解组问题

Java xml解组问题,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,现在,xml如下所示: <db> <type1> <data1>...</data1> <data2>...</data2> ... <data7>...</data7> </type1> <type2> <meta1>...</meta1> <meta2>...</meta2&g

现在,xml如下所示:

<db>
 <type1>
   <data1>...</data1>
   <data2>...</data2>
          ...
   <data7>...</data7>
 </type1>
 <type2>
   <meta1>...</meta1>
   <meta2>...</meta2>
          ...
   <meta9>...</meta9>
 </type2>
.....
</db>

...
...
...
...
...
...
...
...
.....
这个xml只包含几个type1和type2信息。我希望解组这个xml文件,只需要类型1的信息data1、data3、data5和类型2的信息meta1、meta4、meta6

对于type1,每个type1都包含data1、data3和data5,但可能不包含data2、data4、data6和data7

对于类型2,每个类型1都包含meta1、meta4和meta6,但可能不包含meta2、meta3、meta5、meta7、meta8和meta9。 我有三个问题:

  • 如何处理这个xml文件中的两种类型?定义两个类

  • 我不知道如何解决data2、data4、data6、data7可能不出现在这个xml文件中的问题

  • 我是否需要两个定义两个列表来保存结果?因为有很多标签,比如type1和type2

  • 有人能给我一些链接让我学习吗?我发现了很多,但它们没有帮助。谢谢

    如果您想要解组,这意味着映射到特定的Java类,在这种情况下,
    type1
    type2
    将是不同的类

    如果您想要更动态的东西,其中
    type1
    type2
    不是实际的Java类,那么您谈论的是解析,而不是解组,在这种情况下,您应该查看DOM或StAX

    对于编组,可以指定如下内容(为了简洁起见,省略了getter和setter):

    在上运行
    schemagen
    ,将生成以下XSD文件:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
      <xs:element name="db" type="db"/>
    
      <xs:complexType name="db">
        <xs:sequence>
          <xs:element name="type1" type="type1"/>
          <xs:element name="type2" type="type2"/>
        </xs:sequence>
      </xs:complexType>
    
      <xs:complexType name="type1">
        <xs:sequence>
          <xs:element name="data1" type="xs:string"/>
          <xs:element name="data2" type="xs:string" minOccurs="0"/>
          <xs:element name="data3" type="xs:string"/>
          <xs:element name="data4" type="xs:string" minOccurs="0"/>
          <xs:element name="data5" type="xs:string"/>
          <xs:element name="data6" type="xs:string" minOccurs="0"/>
          <xs:element name="data7" type="xs:string" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    
      <xs:complexType name="type2">
        <xs:sequence>
          <xs:element name="meta1" type="xs:string"/>
          <xs:element name="meta2" type="xs:string" minOccurs="0"/>
          <xs:element name="meta3" type="xs:string" minOccurs="0"/>
          <xs:element name="meta4" type="xs:string"/>
          <xs:element name="meta5" type="xs:string" minOccurs="0"/>
          <xs:element name="meta6" type="xs:string"/>
          <xs:element name="meta7" type="xs:string" minOccurs="0"/>
          <xs:element name="meta8" type="xs:string" minOccurs="0"/>
          <xs:element name="meta9" type="xs:string" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
    
    
    
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
      <xs:element name="db" type="db"/>
    
      <xs:complexType name="db">
        <xs:sequence>
          <xs:element name="type1" type="type1"/>
          <xs:element name="type2" type="type2"/>
        </xs:sequence>
      </xs:complexType>
    
      <xs:complexType name="type1">
        <xs:sequence>
          <xs:element name="data1" type="xs:string"/>
          <xs:element name="data2" type="xs:string" minOccurs="0"/>
          <xs:element name="data3" type="xs:string"/>
          <xs:element name="data4" type="xs:string" minOccurs="0"/>
          <xs:element name="data5" type="xs:string"/>
          <xs:element name="data6" type="xs:string" minOccurs="0"/>
          <xs:element name="data7" type="xs:string" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    
      <xs:complexType name="type2">
        <xs:sequence>
          <xs:element name="meta1" type="xs:string"/>
          <xs:element name="meta2" type="xs:string" minOccurs="0"/>
          <xs:element name="meta3" type="xs:string" minOccurs="0"/>
          <xs:element name="meta4" type="xs:string"/>
          <xs:element name="meta5" type="xs:string" minOccurs="0"/>
          <xs:element name="meta6" type="xs:string"/>
          <xs:element name="meta7" type="xs:string" minOccurs="0"/>
          <xs:element name="meta8" type="xs:string" minOccurs="0"/>
          <xs:element name="meta9" type="xs:string" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>