-1

下面给出了我的 XML 文件,我使用 xml 作为外部文件:

<?xml version="1.0"?>
<custscales>
    <custscale sclNo="1" type="lin">
        <scaleName>Custom Scale Lin</scaleName>
        <jsfunc>custLin</jsfunc>
    </custscale>
    <custscale sclNo="2" type="map">
        <scaleName>Custome Scale Map</scaleName>
        <jsfunc>custMap</jsfunc>
    </custscale>
    <custscale sclNo="3" type="pol">
        <scaleName>Custome Scale Pol</scaleName>
        <jsfunc>custPol</jsfunc>
    </custscale>
    <custscale sclNo="4" type="tbl1">
        <scaleName>Custome Scale Table</scaleName>
        <jsfunc>custTbl1</jsfunc>
    </custscale>
</custscales>

从上面的 xml 文件中,我只想删除 sclNo ="4" 的节点,我的意思是保存后下面的节点不应该在文件中。

    <custscale sclNo="4" type="tbl1">
        <scaleName>Custome Scale Table</scaleName>
        <jsfunc>custTbl1</jsfunc>
    </custscale>

请给出使用simpleXML 的例子。

4

3 回答 3

2
<?php

$doc = new DOMDocument; 
$doc->load('theFile.xml');

$thedocument = $doc->documentElement;

$list = $thedocument->getElementsByTagName('custscale ');


$nodeToRemove = null;
foreach ($list as $domElement){
  $attrValue = $domElement->getAttribute('sclNo');
  if ($attrValue == '4') {
    $nodeToRemove = $domElement; //will only remember last one- but this is just an example :)
  }
}

if ($nodeToRemove != null)
$thedocument->removeChild($nodeToRemove);

echo $doc->saveXML(); 
?>

取自这里

于 2013-04-29T22:36:36.170 回答
0

要求给出使用simpleXML的例子

这已在 SimpleXML for PHP 中删除具有特定属性的子项中详细概述。

关键是您将要取消设置的元素分配给变量 - 例如$element- 例如通过使用 Xpath 查询(标准示例)查询单个或多个节点 - 然后取消设置:

$element = $xml->xpath('/path/to/element/to[@delete = "true"]')[0];
unset($element[0]);

在 simplexml 中已经是这样了。如您所见,这非常简单。一个完整的例子:

$xml = simplexml_load_string(<<<BUFFER
<path>
 <to>
   <element>
     <to delete="true" />
   </element>
 </to>
</path>
BUFFER;
);

$element = $xml->xpath('/path/to/element/to[@delete = "true"]')[0];
unset($element[0]);

$xml->asXML('php://output');

在行动中看到它。

于 2013-04-30T09:39:50.893 回答
0

使用simplexml

$xml = simplexml_load_string($x); // assume XML in $x
$i = count($xml); 

for ($i; $i > 0; $i--) {   
    $cs = $xml->custscale[$i];
    if ($cs['sclNo'] == "4") unset($xml->custscale[$i]);
}
于 2013-04-29T23:02:14.977 回答