使用SimpleXML解释BLAST XML输出 - 连字符问题?嵌套对象访问语法问题?

时间:2011-07-20 15:51:48

标签: xml simplexml blast ncbi

我正在尝试使用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>

这是我的代码(注意:$ qdef和$ qlen的结果不同以确保我在设置/使用$ output变量时没有犯下一些愚蠢的错误):

$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位和其他两个变量之间的{''}之外,我无法弄清楚我在做什么。但是,如果我将{''}内容添加到BlastOutput_program中,它仍然可以正常工作并为此生成正确的输出。这是什么交易?

更新:它使用xpath,如下所示:

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

但我仍然非常想知道这是否是唯一的方法,或者是否有办法像上面所示那样做。

1 个答案:

答案 0 :(得分:0)

知道了。一位朋友指出this site,它显示我做错了什么:我需要指定可能有多个条目的XML元素的索引。

E.g。

$firstHit = $xml->BlastOutput_iterations->Iteration[0]->Iteration_hits->Hit[0];