使用 SimpleXML、PHP 删除 XML 节点
Delete XML node with SimpleXML, PHP
我正在尝试使用 PHP(简单XML)删除 XML 节点。
这是我的 XML:
<?xml version="1.0"?>
<items>
<a>
<name>A1</name>
<b>
<title>Item1</title>
<url>item1</url>
</b>
<b>
<title>Item2</title>
<url>item2</url>
</b>
<b>
<title>Item3</title>
<url>item3</url>
</b>
</a>
<a>
<name>A2</name>
<b>
<title>Item1</title>
<url>item1</url>
</b>
</a>
</items>
这是我的 PHP 代码:
<?php
$xml = simplexml_load_file($_GET["xml"]);
$sxe = new SimpleXMLElement($xml->asXML());
$ID = $_GET["ID"];
$i = -1;
$num = $_GET["num"];
foreach ($sxe->children() as $var) {
if ($var == $ID) {
foreach ($var->children() as $data) {
if ($data == "link") {
$i++;
if ($i == $num) {
if ( ! empty($sxe)) {
unset($sxe[0]);
}
}
}
}
}
}
$sxe->asXML($_GET["xml"]);
?>
此代码查找 $ID 的数据(例如,$ID="A1")。它看起来要删除的节点是一个节点(带有 和 ),它是#$num 节点。
示例:如果 $ID="A1" 且 $num=1,
它需要删除标题为 "Item2" 和 url "item2".
的节点
我做错了什么?
谢谢!
使用xpath 查找节点。在你的例子中它将是
//a[name="A1"]/b[2]
并使用DomDocument
方法removeChild
改变xml
$sxe = simplexml_load_string($xml);
$node = $sxe->xpath('//a[name="'. $ID .'"]/b['. $num .']');
$dom=dom_import_simplexml($node[0]);
$dom->parentNode->removeChild($dom);
echo $sxe->asXML();
我正在尝试使用 PHP(简单XML)删除 XML 节点。
这是我的 XML:
<?xml version="1.0"?>
<items>
<a>
<name>A1</name>
<b>
<title>Item1</title>
<url>item1</url>
</b>
<b>
<title>Item2</title>
<url>item2</url>
</b>
<b>
<title>Item3</title>
<url>item3</url>
</b>
</a>
<a>
<name>A2</name>
<b>
<title>Item1</title>
<url>item1</url>
</b>
</a>
</items>
这是我的 PHP 代码:
<?php
$xml = simplexml_load_file($_GET["xml"]);
$sxe = new SimpleXMLElement($xml->asXML());
$ID = $_GET["ID"];
$i = -1;
$num = $_GET["num"];
foreach ($sxe->children() as $var) {
if ($var == $ID) {
foreach ($var->children() as $data) {
if ($data == "link") {
$i++;
if ($i == $num) {
if ( ! empty($sxe)) {
unset($sxe[0]);
}
}
}
}
}
}
$sxe->asXML($_GET["xml"]);
?>
此代码查找 $ID 的数据(例如,$ID="A1")。它看起来要删除的节点是一个节点(带有 和 ),它是#$num 节点。
示例:如果 $ID="A1" 且 $num=1, 它需要删除标题为 "Item2" 和 url "item2".
的节点我做错了什么?
谢谢!
使用xpath 查找节点。在你的例子中它将是
//a[name="A1"]/b[2]
并使用DomDocument
方法removeChild
改变xml
$sxe = simplexml_load_string($xml);
$node = $sxe->xpath('//a[name="'. $ID .'"]/b['. $num .']');
$dom=dom_import_simplexml($node[0]);
$dom->parentNode->removeChild($dom);
echo $sxe->asXML();