2011-02-10 1 views
0

を必要とするとき、私は、タイトルは少し奇妙に思えるかもしれません知っていると私は事前に謝罪、しかし、私はこれを行うことができるようにしたいPHPを使用してXMLファイルから要素を削除します。私は特定のもの

xmlファイルがどのように見えますこの:

<data> 
<row> 
    <EventID>12345</EventID> 
    <Event>Name of Event</Event> 
    <EventCat>2</PCatID> 
    <City>Tacoma</City> 
    <State>Washington</State> 
    <Zip>98421</Zip> 
</row> 

は今、別のカテゴリIDの持つこれらのトンがある私は、カテゴリ2でものを保存し、残りの部分を削除することができるようにしたい(1-5を言うことができます)。何か案は?私はここにいて、いくつかの異なる例を見ましたが、それらを働かせることができませんでした。このような

$searchString = '1'; 
$doc = new DOMDocument; 
$doc->formatOutput = TRUE; 
$doc->preserveWhiteSpace = FALSE; 
$doc->load($path.'name.xml'); 
$xPath = new DOMXPath($doc); 
$query = sprintf('//data/row[./PCatID[text()="%s"]]', $searchString); 
} 
$doc->saveXML(); 

は私を助けてください。

ありがとうございます。

答えて

0

だけのXPathとそれらの行を探し、それらを削除します。

$d = new DOMDocument(); 
$d->loadXml($f); 
$xp = new DOMXpath($d); 
foreach ($xp->query("//row[./PCatID != 2]") as $ev) { 
    $ev->parentNode->removeChild($ev); 
} 
+0

この場合

<?php $path = 'absolute/server/path'; $file_xml = $path."/your/xml/file.xml"; $data = simplexml_load_file($file_xml); $data_count = count($data->row); for($i = 0; $i < $data_count; $i++) { //basically what you want to remove if(($data->row[$i]->PCatID == "1") || ($data->row[$i]->PCatID == "3") || ($data->row[$i]->PCatID == "4")) { unset($data->row[$i]); } } file_put_contents($file_xml, $data->saveXML()); ?> 

だから、それが全体の「行」を削除します:最後に、私は、私は次の操作を行って、仕事に必要なものですPCatIDノードだけでなく、 – rchiriboga

+0

$ file_xml = $パス。 "name.xml";$ d =新しいDOMDocument(); $ d-> load($ file_xml); $ xp =新しいDOMXpath($ d); $ ev-> parentNode-> removeChild($ ev); foreach($ xp-> query( "//行[./ PCatID!= 2]") \t } $ d-> save($ file_xml); – rchiriboga

+0

@userあなたが望んでいたものではありませんか?いずれにしても、 'PCatID'要素を削除したいだけなら、それはxpath式の小さな変更に過ぎません。 – Artefacto

0

上記の答えは私のために、固体、それは本当にdidntの仕事だが。 「行」のための情報については上記を参照してください、「PCatID」

関連する問題