Perl XML :: DOM结束标记

时间:2016-01-14 00:40:50

标签: xml perl dom

我正在解析并添加到XML文档,该文档使用Perl的XML::DOM模块具有以下结构。

<spectrum_query spectrum="7633.7633.2">
      <search_result>
        <search_hit hit_rank="1" peptide="MLATLAPEQR" >
          <alternative_protein protein="NP_7630153.2" />
          <modification_info>
            <mod_aminoacid_mass position="1" mass="147.0353996062"/>
            <mod_aminoacid_mass position="9" mass="129.0425935114"/>
          </modification_info>
          <search_score name="PSM score" value="6.99"/>
          <search_score name="PSM confidence" value="76.47"/>
          <search_score name="SpecEValue" value="3.6509737E-6"/>
          <search_score name="MVH" value="4.772447368593232E-21"/>
          <search_score name="theoretical mass" value="1145.5750592567304"/>
        </search_hit>
      </search_result>
    </spectrum_query>

我在&#39; search_hit&#39;中插入以下XML标记。标记和最后一次搜索_score&#39;使用setAttribute()和appendChild()函数标记如下。

......
<search_score name="theoretical mass" value="1145.5750592567304"/>
<analysis_result analysis="peptideprophet">
<peptideprophet_result probability="0.7647" all_ntt_prob="(0,0,0)"/>
</analysis_result>
</search_hit>

我希望使用$ doc - &gt;在最终输出文件中编写如下所示的封闭标签; printToFile(&#34; Dom.out.xml&#34)。但是在输出文件中没有写入关闭标记。无论如何都要写结束标签? 感谢

<search_score name="PSM score" value="6.99"></search_score>
<peptideprophet_result probability="0.7647" all_ntt_prob="(0,0,0)"></peptideprophet_result>

1 个答案:

答案 0 :(得分:2)

更新

documentation for XML::DOM有这个说法

  

默认情况下XML::DOM压缩所有空元素标记(样式0)。您可以通过调用XML::DOM::setTagCompression并引用带有2个参数的函数来控制用于特定元素的样式。第一个是Element的标签名称,第二个是正在打印的XML::DOM::Element。该函数应返回0,1或2,以指示应使用哪种样式打印空标记。

看起来格式1是您想要的格式,并且由于您需要以相同的方式处理所有空元素,因此将其添加到程序顶部应进行必要的更改

XML::DOM::setTagCompression ( sub { 1 } );


在XML中,元素,如

<tag></tag>

也可以写成

<tag/>

因为它更清晰,更简洁,所以XML::DOM在这种情况下选择了这一点。您的XML数据很好