我似乎无法解决这个问题......
我有这个Xml:
<?xml version="1.0" encoding="utf-8"?>
<report>
<report-name name="SEARCH_QUERY_PERFORMANCE_REPORT"/>
<date-range date="Jan 1, 2016-Jan 31, 2016"/>
<table>
<columns>
<column name="campaignID" display="Campaign ID"/>
<column name="campaign" display="Campaign"/>
<column name="adGroupID" display="Ad group ID"/>
<column name="campaignState" display="Campaign state"/>
<column name="keyword" display="Keyword"/>
<column name="searchTerm" display="Search term"/>
<column name="convertedClicks" display="Converted clicks"/>
<column name="impressions" display="Impressions"/>
<column name="clicks" display="Clicks"/>
<column name="ctr" display="CTR"/>
<column name="avgCPC" display="Avg. CPC"/>
<column name="avgPosition" display="Avg. position"/>
<column name="cost" display="Cost"/>
<column name="device" display="Device"/>
</columns>
<row device="Mobile devices with full browsers" cost="3940000" avgPosition="2.0" avgCPC="3940000" ctr="100.00%" clicks="1" impressions="1" convertedClicks="0" searchTerm="purple jeep near elgin for sale" keyword="jeepdealership" campaignState="enabled" adGroupID="7751248218" campaign="Zeigler CDJ_Dealer Campaign" campaignID="134270778"/>
<row device="Mobile devices with full browsers" cost="3930000" avgPosition="1.0" avgCPC="3930000" ctr="100.00%" clicks="1" impressions="1" convertedClicks="0" searchTerm="jeep wrangler rubicon 2015" keyword="jeepdealership" campaignState="enabled" adGroupID="7751248218" campaign="Zeigler CDJ_Dealer Campaign" campaignID="134270778"/>
<row device="Mobile devices with full browsers" cost="2010000" avgPosition="3.0" avgCPC="2010000" ctr="100.00%" clicks="1" impressions="1" convertedClicks="0" searchTerm="altitute jeep cherokee" keyword="2015 jeep Cherokee" campaignState="enabled" adGroupID="18188246418" campaign="Zeigler CDJ_Targeted Campaign" campaignID="134270898"/>
<row device="Mobile devices with full browsers" cost="3990000" avgPosition="1.0" avgCPC="3990000" ctr="100.00%" clicks="1" impressions="1" convertedClicks="0" searchTerm="2012 jeep cherokee" keyword="2015 +Jeep +cherokee" campaignState="enabled" adGroupID="18188246418" campaign="Zeigler CDJ_Targeted Campaign" campaignID="134270898"/>
</table>
我需要删除Xml中的一些节点(及其子节点)。我使用以下代码:
$doc = new DOMDocument;
$doc->load('qreport.xml');
$node = $doc->documentElement;
// Retrieve the sub-nodes and remove from xml
$subnodes = $node->getElementsByTagName('columns')->item(0);
$remnodes = $node->removeChild($subnodes);
echo $doc->saveXML();
因此,当将其放入节点名称时,它们将被删除。例如,此代码有效,我可以删除 table 及其子代,我可以删除 report-name 和 date-range 。
但是我无法删除列及其子代。
不清楚我做错了什么。
答案 0 :(得分:1)
$subnodes = $node->getElementsByTagName('columns')->item(0);
$remnodes = $node->removeChild($subnodes);
您必须在$ somenode的直接父级上调用->removeChild($somenode)
。
元素<columns>
是<table>
的子元素,而不是documentElement(== $ node)<report>
的子元素。
尝试
$subnodes = $node->getElementsByTagName('columns');
if ( $subnodes && $subnodes->length > 0 ) {
$subnodes = $subnodes->item(0);
$remnodes = $subnodes->parentNode->removeChild($subnodes);
}
代替。
另见:http://docs.php.net/class.domnode#domnode.props.parentnode