2011-07-20 15 views
0

私は、いくつかのNCBI BLAST XML出力を読むためにSimpleXMLを使用しようとしていますが、出力の一部にはアクセスできますが、他の部分はアクセスできません。SimpleXMLを使用してBLAST XML出力を解釈する - ハイフンの問題?ネストされたオブジェクトのアクセス構文の問題?

ここではXML(読みやすくするために切除されたいくつかの無関係なセグメント)の関連部分です:$ qdefと$ QLEN私がいなかったことを確認するために、異なるに到着されています

<?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> 

そしてここでは、私のコードは、(注記があります$出力変数)を使用して、/設定でいくつかの愚かなミスを犯した。

Query Program: blastn 
Query: 
Query Length: 
:ここ

$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; 

は出力です10

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

何か間違っていますか?私は、BlastOutput_programビットと他の2つの変数の間の{''}以外のことを、私が別にやっていることは分かりません。しかし、BlastOutput_programに{''}のものを追加しても、それでも正常に動作し、正しい出力が得られます。どうしたんだ?

更新:次のようにそれは、XPathを使用して動作します:

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

をしかし、私はまだ本当にそれはそれを行うための唯一の方法だかどうかを知りたいのですか、私のようにそれを行う方法があるかどう上記のとおりです。

答えて

0

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

など。

$firstHit = $xml->BlastOutput_iterations->Iteration[0]->Iteration_hits->Hit[0]; 
関連する問題