0
$xml = '<books>
<book>
<qty>12</qty>
<title>C++</title>
</book>
<book>
<qty>21</qty>
<title>PHP</title>
</book>
</books>
<books>
<book>
<qty>21</qty>
<title>JAVA</title>
</book>
</books>';
$str = '<content>'.$xml.'</content>';
$doc = new DOMDOcument;
$doc->loadxml($str);
$xpath = new DOMXpath($doc);
$arr = array(
array('12;C++', '21;PHP')
);
# Remove elements based on qty and title
foreach($arr as $items) {
foreach($items as $item) {
list($qty, $title) = explode(';', $item);
foreach($xpath->query('/content/books/book[title="'.$title.'"][qty="'.$qty.'"]') as $book) {
$book->parentNode->removeChild($book);
}
}
}
# Remove empty <books>
foreach($xpath->query('books[count(book)=0]') as $empty) {
$empty->parentNode->removeChild($empty);
}
header('Content-type: text/xml');
echo $doc->savexml();
OUTPUT:ケースノードのxmlノード&&データを同じデータで削除しますか?
<content>
<books>
<book>
<qty>21</qty>
<title>JAVA</title>
</book>
</books>
</content>
しかし、XMLは、このように同じデータが含まれている場合:それは、削除理由
<content>
<books>
<book>
<qty>21</qty>
<title>PHP</title>
</book>
</books>
</content>
:
$xml = '<books>
<book>
<qty>12</qty>
<title>C++</title>
</book>
<book>
<qty>21</qty>
<title>PHP</title>
</book>
</books>
<books>
<book>
<qty>21</qty>
<title>PHP</title> <!-- here the same data-->
</book>
</books>';
を、それが出力にこのような何かを取得する必要があります私のノードのすべて?と私は得た
<content>
</content>
$編曲=配列( \t \t // 0 =>配列(の順序を'21; PHP ')、 \t \t 1 => array('21; PHP') \t);重要です – kn3l