0

SimpleXML を使用して NCBI BLAST XML 出力を読み取ろうとしていますが、一部の出力にはアクセスできますが、他のビットにはアクセスできません。

XML の関連部分を次に示します (読みやすくするために一部の無関係なセグメントを省略しています)。

    <?xml version="1.0"?> <!DOCTYPE BlastOutput PUBLIC "-//NCBI//NCBI BlastOutput/EN" "NCBI_BlastOutput.dtd"> 
<BlastOutput>
   <BlastOutput_program>blastn</BlastOutput_program>
   <BlastOutput_db>allconstructs.fasta</BlastOutput_db>
   <BlastOutput_iterations>
        <Iteration>
          <Iteration_iter-num>1</Iteration_iter-num>
          <Iteration_query-ID>Query_1</Iteration_query-ID>
          <Iteration_query-def>gene_1_query</Iteration_query-def>
          <Iteration_query-len>1005</Iteration_query-len>

そして、これが私のコードです(注: $output 変数の設定/使用で愚かな間違いを犯していないことを確認するために、 $qdef と $qlen は異なる方法で到達します):

$blast = simplexml_load_string($xml);

$output = $xml->BlastOutput_iterations->Iteration;

$qprog = $blast->BlastOutput_program;
$qdef = $xml->BlastOutput_iterations->Iteration->{'Iteration_query-def'};
$qlen = $output->{'Iteration_query-len'};

echo "Query Program: ".$qprog."<br/>Query: ".$qdef."<br/>Query Length: " .$qlen;

出力は次のとおりです。

Query Program: blastn
Query: 
Query Length:

Iteration_query-def と Iteration_query-len の周りの {''} を削除すると、それらは整数として扱われ、両方に対してゼロが返されます。

私は何か間違ったことをしていますか?BlastOutput_program ビットと他の 2 つの変数の間の {''} 以外に、私が別の方法で行っていることを理解できません。ただし、{''} を BlastOutput_program に追加しても、問題なく動作し、正しい出力が生成されます。どうしたんだ?

更新: 次のように xpath を使用して動作します。

$qlen = $blast->xpath('BlastOutput_iterations/Iteration/Iteration_query-def');

しかし、それが唯一の方法なのか、それとも上記のように行う方法があるのか​​ を知りたいです。

4

1 に答える 1

0

とった。友人がこのサイトを指摘してくれましたが、これは私が間違っていたことを示しています。複数のエントリを持つ可能性のある XML 要素のインデックスを指定する必要があったのです。

例えば

$firstHit = $xml->BlastOutput_iterations->Iteration[0]->Iteration_hits->Hit[0];
于 2011-07-21T14:19:26.957 に答える