我正在尝试使用 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');
但我仍然很想知道这是否是唯一的方法,或者是否有办法像我上面展示的那样做。