php 版本 php-5.2.6
Apache 版本 Apache2
XML文件:books.xml
<?xml version="1.0" ?>
- <store>
- <books>
- <book id="1">
<author>Jack Herrington</author>
<title>PHP Hacks</title>
<publisher>O'Reilly</publisher>
</book>
- <book id="2">
<author>Jack Herrington</author>
<title>Podcasting Hacks</title>
<publisher>O'Reilly</publisher>
</book>
</books>
</store>php文件:rm.php
<?php
$doc = new DOMDocument;
$doc->load('books.xml');
$book = $doc->documentElement;
$chapters = $book->getElementsByTagName('book');
foreach($chapters as $ch)
{
echo $ch->getAttribute('id').'<br>';if($ch->getAttribute('id')=="1")
{$book->removeChild($ch);$doc->save("books3.xml");}
}
?> 调试过程:
在apache2 中运行rm.php,报错如下:Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in F:\ampwww\rm.php:14 Stack trace: #0 F:\ampwww\rm.php(14): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in F:\ampwww\rm.php on line 14
调整XML文件格式如下:
<?xml version="1.0" ?>
- <books>
- <book id="1">
<author>Jack Herrington</author>
<title>PHP Hacks</title>
<publisher>O'Reilly</publisher>
</book>
- <book id="2">
<author>Jack Herrington</author>
<title>Podcasting Hacks</title>
<publisher>O'Reilly</publisher>
</book>
</books>则执行rm.php,删除节点成功。请教:这种有XML文件如何删除其一个节点?初涉PHP,先谢了。
Apache 版本 Apache2
XML文件:books.xml
<?xml version="1.0" ?>
- <store>
- <books>
- <book id="1">
<author>Jack Herrington</author>
<title>PHP Hacks</title>
<publisher>O'Reilly</publisher>
</book>
- <book id="2">
<author>Jack Herrington</author>
<title>Podcasting Hacks</title>
<publisher>O'Reilly</publisher>
</book>
</books>
</store>php文件:rm.php
<?php
$doc = new DOMDocument;
$doc->load('books.xml');
$book = $doc->documentElement;
$chapters = $book->getElementsByTagName('book');
foreach($chapters as $ch)
{
echo $ch->getAttribute('id').'<br>';if($ch->getAttribute('id')=="1")
{$book->removeChild($ch);$doc->save("books3.xml");}
}
?> 调试过程:
在apache2 中运行rm.php,报错如下:Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in F:\ampwww\rm.php:14 Stack trace: #0 F:\ampwww\rm.php(14): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in F:\ampwww\rm.php on line 14
调整XML文件格式如下:
<?xml version="1.0" ?>
- <books>
- <book id="1">
<author>Jack Herrington</author>
<title>PHP Hacks</title>
<publisher>O'Reilly</publisher>
</book>
- <book id="2">
<author>Jack Herrington</author>
<title>Podcasting Hacks</title>
<publisher>O'Reilly</publisher>
</book>
</books>则执行rm.php,删除节点成功。请教:这种有XML文件如何删除其一个节点?初涉PHP,先谢了。
解决方案 »
- 关于preg_match_all的抓取
- php中用mysql的START TRANSACTION和commit包围了4条插入语句,发现用事务比不用的时候插入的快这是为什么呢?
- 请问 设置了set_time_limit 为何页面还会 504错误?
- 总是提示错误,谁有办法解决的吗
- 求一个数组排序的算法
- * 技术问题请教: cgi-bin目录下的PHP密码文件如何防止被网络爬虫下载?
- 如果在一个网页文件中需要访问多个网址,只能建成frameset结构吗?
- php 职何导入导出XLS 文件
- 类似网页地图的问题
- 请问下面的问题怎么解决?
- 使用pear 发送e-mail,附件为中文文件名,exchange收到后文件名都被替换成ATTxxxxx.dat,有用过pear的人知道怎么回事么?
- 支付宝的验证机制是什么?用PHP模拟支付宝登陆写入cookie时出现的问题!
看看手册吧.
另外一楼和你遇到的问题差不多,可以查看一下他解决的办法.
改成这样看看。
<?xml version="1.0" ?>
- <store>
- <books>
- <book id="1">
<author>Jack Herrington </author>
<title>PHP Hacks </title>
<publisher>O'Reilly </publisher>
</book>
- <book id="2">
<author>Jack Herrington </author>
<title>Podcasting Hacks </title>
<publisher>O'Reilly </publisher>
</book>
</books>
</store>
books.xml文件修改成
<?xml version="1.0" ?>
- <books>
- <book id="1">
<author>Jack Herrington </author>
<title>PHP Hacks </title>
<publisher>O'Reilly </publisher>
</book>
- <book id="2">
<author>Jack Herrington </author>
<title>Podcasting Hacks </title>
<publisher>O'Reilly </publisher>
</book>
</books>
我原来的php可以正常删除一个节点。
但是,在加了一层嵌套后就不能执行了。
没接触XML和PHP过,多谢各位指点。
$doc->load('book.xml');$book = $doc->documentElement;// we retrieve the chapter and remove it from the book
$chapter = $book->getElementsByTagName('chapter')->item(0);
$oldchapter = $book->removeChild($chapter);echo $doc->saveXML();
?>The above example will output:<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book id="listing">
<title>My lists</title>
</book>这个在增加一层嵌套后不知道能不能执行?
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$book = $doc->documentElement;
$obook = $book->getElementsByTagName('books')->item(0);
$chapters = $book->getElementsByTagName('book');foreach($chapters as $ch)
{
echo $ch->getAttribute('id');
if($ch->getAttribute('id')=="1")
{
$obook->removeChild($ch);
$doc->save("books1.xml");
}
}
?>
<?php
$doc = new DOMDocument;
$doc->load('book.xml');
$chapters = $doc->documentElement->getElementsByTagName('book');foreach($chapters as $ch)
{
if($ch->getAttribute('id')=="1")
{
$ch->parentNode->removeChild($ch);
$doc->save("books1.xml");
}
}
?>简化版.通过获取父节点来删除自己
问题搞定!
$node->parentNode->removeChild($node);
这样写也可以,少一个判断