如何使用 PHP XML Dom 中的属性值删除特定节点?
我的问题是最好的短语: 在 SimpleXML 中删除具有特定属性的子项对于 PHP,
除了我没有使用 simpleXML。
我对 PHP 的 XML 很陌生,所以我可能没有采取最好的方式,
为每个单独的用户使用 $dom->save($xml) 创建 xml。 (由于未公开的原因,没有将所有内容都放在一个 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>
我想删除一个具有名为 id 的特定属性的类别,其中包含 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 );
}
好吧,当我将 return 放在 if 之外时,上面总是打印 [0]->0 的数组。 有没有更好的办法? 我也尝试过使用 getElementbyId 但我不知道如何操作。
我宁愿不使用属性,但如果这会让事情变得更容易。
My question is best phrase as:
Remove a child with a specific attribute, in SimpleXML for PHP
except I'm not using simpleXML.
I'm new to XML for PHP so I may not be doing the best way
I have a xml created using the $dom->save($xml) for each individual user. (not placing all in one xml due to undisclosed reasons)
It gives me that xml declaration <?xml version="1.0"?>
(no idea how to make it to others, but that's not the point, hopefully)
<?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>
And I want to remove a category that has a specific attribute named id with the DOM class in php when i run a function activated from using a remove button.
the following is the debug of the function im trying to get to work. Can i know what I'm doing wrong?
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 );
}
Well the above prints me an array of [0]->0 all the time when i slot the return outside the if.
is there a better way? I've tried using getElementbyId as well but I've no idea how to work that.
I would prefer not to use an attribute though if that would make things easier.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你能尝试一下这个修改后的版本吗:
它对我有用。 只需根据您的需要进行调整即可。 它并不打算按原样使用,而只是一个概念证明。
您还必须从字符串中删除 xml 声明。
Can you try with this modified version:
It's working for me. Just adapt it to your needs. It's not intended to use as-is, but just a proof of concept.
You also have to remove the xml declaration from the string.
修改上述函数以从邮件列表中删除电子邮件
the above funciton modified to remove an email from a mailing list
好的,让我们尝试一下这个完整的使用示例:
Ok, let’s try this complete example of use:
您想删除具有特定
id
的category
节点吗?您还可以使用 XPath 来获取节点,例如:
我还没有测试过它,但它应该可以工作。
So you want to remove the
category
node with a specificid
?You could also use XPath to get the node, for example:
I haven’t tested it but it should work.