如何在PHP XML Dom中使用其属性值删除特定节点?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在PHP XML Dom中使用其属性值删除特定节点?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2711字,纯文字阅读大概需要4分钟。
内容图文
我的问题是最好的短语:
Remove a child with a specific attribute, in SimpleXML for PHP
除了我没有使用simpleXML.
我是PHP for XML的新手,所以我可能没有做到最好的方式
我为每个用户使用$dom-> save($xml)创建了一个xml. (由于未公开的原因,不能将所有内容放在一个xml中)
它给了我xml声明<?xml version =“1.0”?> (不知道如何把它交给别人,但这不是重点,希望如此)
<?xml version="1.0"?>
<details>
<person>name</person>
<data1>some data</data1>
<data2>some data</data2>
<data3>some data</data3>
<category id="0">
<categoryName>Cat 1</categoryName>
<categorydata1>some data</categorydata1>
</category>
<category id="1">
<categoryName>Cat 2</categoryName>
<categorydata1>some data</categorydata1>
<categorydata2>some data</categorydata2>
<categorydata3>some data</categorydata3>
<categorydata4>some data</categorydata4>
</category>
</details>
当我运行使用删除按钮激活的函数时,我想在php中删除具有DOM类特定属性的类别.
以下是我试图开始工作的函数的调试.我能知道我做错了什么吗?
function CatRemove($myXML){
$xmlDoc = new DOMDocument();
$xmlDoc->load( $myXML );
$categoryArray = array();
$main = $xmlDoc->getElementsByTagName( "details" )->item(0);
$mainElement = $xmlDoc->getElementsByTagName( "details" );
foreach($mainElement as $details){
$currentCategory = $details->getElementsByTagName( "category" );
foreach($currentCategory as $category){
$categoryID = $category->getAttribute('id');
array_push($categoryArray, $categoryID);
if($categoryID == $_POST['categorytoremoveValue']) {
return $categoryArray;
}
}
}
$xmlDoc->save( $myXML );
}
以上,当我在if之外插入返回时,上面打印出一个[0] – > 0的数组.
有没有更好的办法?我也尝试过使用getElementbyId,但我不知道如何使用它.
我宁愿不使用属性,但如果这会使事情变得更容易.
解决方法:
好的,让我们试试这个完整的使用示例:
function CatRemove($myXML, $id) {
$xmlDoc = new DOMDocument();
$xmlDoc->load($myXML);
$xpath = new DOMXpath($xmlDoc);
$nodeList = $xpath->query('//category[@id="'.(int)$id.'"]');
if ($nodeList->length) {
$node = $nodeList->item(0);
$node->parentNode->removeChild($node);
}
$xmlDoc->save($myXML);
}
// test data
$xml = <<<XML
<?xml version="1.0"?>
<details>
<person>name</person>
<data1>some data</data1>
<data2>some data</data2>
<data3>some data</data3>
<category id="0">
<categoryName>Cat 1</categoryName>
<categorydata1>some data</categorydata1>
</category>
<category id="1">
<categoryName>Cat 2</categoryName>
<categorydata1>some data</categorydata1>
<categorydata2>some data</categorydata2>
<categorydata3>some data</categorydata3>
<categorydata4>some data</categorydata4>
</category>
</details>
XML;
// write test data into file
file_put_contents('untitled.xml', $xml);
// remove category node with the id=1
CatRemove('untitled.xml', 1);
// dump file content
echo '<pre>', htmlspecialchars(file_get_contents('untitled.xml')), '</pre>';
内容总结
以上是互联网集市为您收集整理的如何在PHP XML Dom中使用其属性值删除特定节点?全部内容,希望文章能够帮你解决如何在PHP XML Dom中使用其属性值删除特定节点?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。