perl 如何删除xml节点?

gary0253 2009-07-23 01:45:23
加精
my $parser=new XML::DOM::Parser;

my $doc=$parser->parsefile("d://news_temp.xml");

my $nodes=$doc->getElementsByTagName("allProperty");

$doc->removeChild($nodes); 这句怎么写??

#########################################################################
news_temp.xml

<root>
<allProperty> # 要删除这个节点
<news_title></news_title>
</allProperty>
</root>
...全文
569 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wq741003 2009-08-03
  • 打赏
  • 举报
回复
yelangju 2009-08-03
  • 打赏
  • 举报
回复
帮顶一下哦
zhaojin 2009-08-02
  • 打赏
  • 举报
回复
顶一下
lqflmn 2009-08-02
  • 打赏
  • 举报
回复
帮钉
billwork 2009-08-02
  • 打赏
  • 举报
回复
顶下!
fldx 2009-08-01
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
bossonljt 2009-08-01
  • 打赏
  • 举报
回复
dddd
hankanling123 2009-08-01
  • 打赏
  • 举报
回复
怎样删除,好像有一点不对!!!!
owen_008 2009-08-01
  • 打赏
  • 举报
回复


use strict;
use warnings;
use XML::DOM;

my $parser=new XML::DOM::Parser;
my $doc=$parser->parse(<<XML);
<root>
<allProperty>
<news_title>yes</news_title>
</allProperty>
</root>
XML

my $nodes = $doc->getElementsByTagName("allProperty");
my $node = $nodes->item(0);
$node->getParentNode->removeChild($node); # delete allProperty
print $doc->toString();



呵呵~~加油~~~
沁梦阿尔卑斯 2009-08-01
  • 打赏
  • 举报
回复
come on
ujschen 2009-07-31
  • 打赏
  • 举报
回复
啊撒旦发射点发射点法
feiyu8607 2009-07-31
  • 打赏
  • 举报
回复
将你要删除的那个节点赋值个一个变量,然后用perl处理。
iambic 2009-07-23
  • 打赏
  • 举报
回复
use strict;
use warnings;
use XML::DOM;

my $parser=new XML::DOM::Parser;
my $doc=$parser->parse(<<XML);
<root>
<allProperty>
<news_title>yes</news_title>
</allProperty>
</root>
XML

my $nodes = $doc->getElementsByTagName("allProperty");
my $node = $nodes->item(0);
$node->getParentNode->removeChild($node); # delete allProperty
print $doc->toString();

iambic 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 semigod 的回复:]
最关键的一个地方你写错了
my $nodes=$doc->getElementsByTagName("allProperty"); 这里返回的应该是数组。所以你不应该用$nodes.应该用@nodes
[/Quote]
$nodes和@nodes都可以。如果是$nodes,返回的是一个NodeList对象。
iambic 2009-07-23
  • 打赏
  • 举报
回复
你想删除的是哪个结点?
fibbery 2009-07-23
  • 打赏
  • 举报
回复
my $parser=new XML::DOM::Parser;  

my $doc=$parser->parsefile("d://news_temp.xml");

my $nodes=$doc->getElementsByTagName("allProperty");
my $parent=$nodes->[0]->getParentNode();
$parent->removeChild($nodes->[0]);


大概是这个意思,我没有测试。主要是,你取得要删除的节点的父节点,然后调用removeChild函数,将要删除的节点作为参数。
Semigod 2009-07-23
  • 打赏
  • 举报
回复
最关键的一个地方你写错了


my $nodes=$doc->getElementsByTagName("allProperty"); 这里返回的应该是数组。所以你不应该用$nodes.应该用@nodes

$doc->removeChild($nodes); 这里呢,你必须针对每个node单独处理。可以针对@nodes for一下
fibbery 2009-07-23
  • 打赏
  • 举报
回复
http://search.cpan.org/~tjmather/XML-DOM-1.44/lib/XML/DOM/Node.pod

removeChild (oldChild)
Removes the child node indicated by oldChild from the list of children, and returns it.

Return Value: The node removed.

DOMExceptions:

NO_MODIFICATION_ALLOWED_ERR
Raised if this node is readonly.

NOT_FOUND_ERR
Raised if oldChild is not a child of this node.

Semigod 2009-07-23
  • 打赏
  • 举报
回复
这个你直接去看W3C 的DOM 文档就知道了
gary0253 2009-07-23
  • 打赏
  • 举报
回复
顶一下..顶一下.

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧