Я написал функцию, которая удаляет все узлы <product>...</product>
, где заголовок не соответствует одному заголовку в моем фильтре массива заголовков.Один XML-файл правильный, другой уничтожен? - Те же функции? (PHP)
Моя проблема в том, что 4 файла XML будет сохранен и модифицирован право, а также сохранен, но один XML-файл становится полностью разрушен ...
После того как я назвал эту функцию на этом XML-листе я просто вижу:
<?xml version="1.0" encoding="utf-8"?>
<products/>
Перед изменением:
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<title>METRO</title>
<price>10.99</price>
<platform>Steam</platform>
</product>
<product>
<title>XBOX Live Gold</title>
<price>46.99</price>
<platform>Xbox</platform>
</product>
</products>
Это моя функция:
function filterGames($dom){
$xpathQuery = "/products/product";
$xp = new DomXpath($dom);
$items = $xp->query($xpathQuery);
echo "(filterGames) Delete Games\n";
foreach ($items as $item) {
$title = $item->getElementsByTagName('title')->item(0)->textContent;
if (!(array_search(mb_strtolower($title), array_map('mb_strtolower', $GLOBALS["titleArray"])))) {
//if (!(in_array($title, $GLOBALS["titleArray"]))) {
$item->parentNode->removeChild($item);
echo "Removed: " . $title ."\n";
}
}
}
У кого-нибудь есть идея, почему 4 файла XML сохраняются и изменяются правильно, но один файл полностью уничтожен?
Я также изменил порядок, в котором файлы XML модифицируются фильтром, но он не внес изменений. Опять же, остальные 4 файла сохраняются и изменяются правильно, но один из них уничтожен. И это всегда один и тот же файл XML, который уничтожается!
Я также вхожу в условие if, потому что вижу это с echo
. Но в любом случае ... Файл уничтожен.
Edit: Вот два примера из моих XML-листов до и после того, как модифицируется filterGames
. Они выглядят точно так же, как разрушенный файл XML, прежде чем модифицированный filterGames
XML File 1 перед модифицирована:
<?xml version="1.0" encoding="UTF-8"?>
<products>
<product>
<price>11.69</price>
<price_base>12.99</price_base>
<title>Final Fantasy VII</title>
</product>
<products>
XML File 1 после того, как модифицированном выглядит точно так же бувигер модификации, за исключением, что некоторые узлы были удалить, потому что они не соответствуют фильтру $GLOBALS["titleArray"]
.
XML File 2 до того изменения:
<products>
<product>
<title>Battlefield 2</title>
<price>5.95</price>
</product>
<products>
XML File 2 после того, как модифицирован выглядит точно как бувигер модификации, за исключением, что некоторые узлы были удалить, потому что они не соответствуют по $GLOBALS["titleArray"]
фильтра.
Я нашел интересный факт! Мой XML-файл, который уничтожается после фильтрации filterGames()
, тем временем не является единственным файлом XML, который уничтожается. И оба файла, где конвертируются мои csvToXML(...)
, работают от CSV до XML. Поэтому я думаю, что причина должна быть такой! - Потому что все другие файлы XML не преобразуются!
function csvToXML($inputFilename, $outputFilename, $delimiter = ',')
{
// Open csv to read
$inputFile = fopen($inputFilename, 'rt');
// Get the headers of the file
$headers = fgetcsv($inputFile, 0, $delimiter);
// Create a new dom document with pretty formatting
$doc = new DOMDocument('1.0', 'utf-8');
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
// Add a root node to the document
$root = $doc->createElement('products');
$root = $doc->appendChild($root);
// Loop through each row creating a <row> node with the correct data
while (($row = fgetcsv($inputFile, 0, $delimiter)) !== false) {
$container = $doc->createElement('product');
foreach ($headers as $i => $header) {
$child = $doc->createElement($header);
$child = $container->appendChild($child);
$value = $doc->createTextNode($row[$i]);
$value = $child->appendChild($value);
}
$root->appendChild($container);
}
$strxml = $doc->saveXML();
$handle = fopen($outputFilename, 'w');
fwrite($handle, $strxml);
fclose($handle);
}
Каково значение в $ GLOBALS ["titleArray"]? Также вы можете добавить другой рабочий файл xml, который работает. –
Функция, которую вы видите там 'filterGames()', есть функция в моем файле function.php. Существуют и другие объявленные функции, и потому, что мне нужны некоторые переменные в разных функциях, я решил сделать их Global в моей функции.php. Не беспокойтесь об этом! Я добавлю еще 2 примера. Но не удивляйтесь. Они выглядят точно так же, как уничтоженный XML-файл, прежде чем изменять! – Jan