1

JAXB の xjc を使用して XML から Java クラスを作成しようとしていますが、従うすべての例で、XML は次のようになっています。

<?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="employee" type="employee"/>

  <xs:complexType name="employee">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="salary" type="xs:double"/>
      <xs:element name="designation" type="xs:string" minOccurs="0"/>
      <xs:element name="address" type="address" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="address">
    <xs:sequence>
      <xs:element name="city" type="xs:string" minOccurs="0"/>
      <xs:element name="line1" type="xs:string" minOccurs="0"/>
      <xs:element name="line2" type="xs:string" minOccurs="0"/>
      <xs:element name="state" type="xs:string" minOccurs="0"/>
      <xs:element name="zipcode" type="xs:long"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

そして私のものは次のようなものです:

<?xml version="1.0"?>
<!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd">
<BlastOutput>
  <BlastOutput_program>blastp</BlastOutput_program>
  <BlastOutput_version>BLASTP 2.2.28+</BlastOutput_version>
  <BlastOutput_reference>Stephen F. Altschul, Thomas L. Madden, Alejandro A. Sch&amp;auml;ffer, Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), &quot;Gapped BLAST and PSI-BLAST: a new generation of protein database search programs&quot;, Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>
  <BlastOutput_db>nr</BlastOutput_db>
  <BlastOutput_query-ID>59663</BlastOutput_query-ID>
  <BlastOutput_query-def>unnamed protein product</BlastOutput_query-def>
  <BlastOutput_query-len>59</BlastOutput_query-len>
  <BlastOutput_param>
    <Parameters>
      <Parameters_matrix>BLOSUM62</Parameters_matrix>
      <Parameters_expect>10</Parameters_expect>
      <Parameters_gap-open>11</Parameters_gap-open>
      <Parameters_gap-extend>1</Parameters_gap-extend>
      <Parameters_filter>F</Parameters_filter>
    </Parameters>
  </BlastOutput_param>
<BlastOutput_iterations>
<Iteration>
  <Iteration_iter-num>1</Iteration_iter-num>
  <Iteration_query-ID>59663</Iteration_query-ID>
  <Iteration_query-def>unnamed protein product</Iteration_query-def>
  <Iteration_query-len>59</Iteration_query-len>
<Iteration_hits>
<Hit>
  <Hit_num>1</Hit_num>
  <Hit_id>gi|28592|emb|CAA23754.1|</Hit_id>
  <Hit_def>serum albumin [Homo sapiens]</Hit_def>
  <Hit_accession>CAA23754</Hit_accession>
  <Hit_len>609</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_num>1</Hsp_num>
      <Hsp_bit-score>126.716</Hsp_bit-score>
      <Hsp_score>317</Hsp_score>
      <Hsp_evalue>2.38539e-38</Hsp_evalue>
      <Hsp_query-from>1</Hsp_query-from>
      <Hsp_query-to>59</Hsp_query-to>
      <Hsp_hit-from>1</Hsp_hit-from>

等々 ...

私は何をすべきか?私はもともとこれを使用して balst xml ファイルを解析しようとしていますが、そのためにはこれが必要です。

4

2 に答える 2

1

XJC は、XML スキーマ ( ( JSR-222 ) アノテーションを持つ Java クラスを生成するために使用されます。XML スキーマは、ドキュメントの構造を定義する標準的な方法です ( http://www.w3.org/XML/Schemaを参照)。生成されたクラスを取得したら、それらを JAXB 実装で使用して、その XML スキーマに準拠するドキュメントを解析/作成できます。

質問の XML は、Document Type Definition ( ) に準拠しています。DTD ファイルは、XML ドキュメントの構造を定義するもう 1 つの方法です。-dtdDTD から JAXB クラスを生成するオプションを指定して XJC ツールを実行できます。

xjc -d out -p com.example.blastoutput  -dtd http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd

以下は、XML ドキュメントを生成されたクラスのインスタンスに変換してから XML に戻す方法を示す JAXB コードのサンプルです。JAXBContextXJC 呼び出しで指定したパッケージ名でを作成する方法に注意してください。

package com.example.blastoutput;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance("com.example.blastoutput");

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/com/example/blastoutput/input.xml");
        BlastOutput blastOutput = (BlastOutput) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(blastOutput, System.out);
    }

}
于 2013-07-18T02:25:34.910 に答える