我正在解析并添加到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>
答案 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数据很好