【问题标题】:Using XML::TWIG, how to remove attribute in only one element使用 XML::TWIG,如何仅删除一个元素中的属性
【发布时间】:2014-03-26 16:19:55
【问题描述】:

我有一个如下所示的 xml:

<first id="1">
 <second id="1">test</second>
 <second>
  <third id="4">test</third>
 </second>
 <second id="3">test</second>
</first>

我想删除“id”属性,但只在“first”元素中。使用 XML::TWIG,我这样做了:

$twig->parsefile('test.xml');
my ($model) = $twig->first_elt('first[@id]');
$model->strip_att('id');

问题是,它删除了所有元素中的“id”属性,而不仅仅是“first”,所以最终文件看起来像这样:

<first>
 <second>test</second>
 <second>
  <third>test</third>
 </second>
 <second>test</second>
</first>

而不是这个:

<first>
 <second id="1">test</second>
 <second>
  <third id="4">test</third>
 </second>
 <second id="3">test</second>
</first>

有什么建议吗?

【问题讨论】:

    标签: xml xml-twig


    【解决方案1】:

    我认为你必须使用 del_att($att) 而不是 strip_att($att),在文档中你可以看到这样的解释:

    strip_att ($att) : 
    

    从元素(包括元素)的所有后代中移除属性$att

    del_att ($att): 
    

    删除元素的属性。

    所以在你的代码中:

    $twig->parsefile('test.xml');
    my ($model) = $twig->first_elt('first[@id]');
    $model->del_att('id');
    

    希望对你有帮助

    【讨论】:

    • 像魅力一样工作。很简单,可惜没找到。非常感谢!
    • 不客气。不要担心它可能发生在任何人身上:)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2016-09-15
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多