Witam, testuje różne warianty XML'a i natknąłem się na średnio zrozumiałą dla mnie rzecz.
Mam taki kod:
plik
testowy.php<?php
$plik_xml = 'p.xml';
/**
* Klasa zamiany pliku XML na tablice w PHP
* Dodałem metode statyczną utf8_for_xml która usuwa krzaki bezpośrednio przy pobieraniu XML'a
*
* XML2Array: A class to convert XML to array in PHP
*
* Author : Abdelwahd Hannabou
*
* Usage:
* $Array = XML2Array::CreateArray('FILE_PATH');
*/
class XML2Array
{
public static function utf8_for_xml
($string) {
return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', '', $string); }
public static function ampersandClean
($string) {
}
public static function CreateArray
($XmlFilePath) {
return FALSE;
}
$Class['UsersFileXml'] = self::ampersandClean(self::utf8_for_xml(file_get_contents($XmlFilePath))); /* echo "<pre>";
print_r($Class['UsersFileXml']);
echo "</pre>"; */
$Class['FileXml'] = simplexml_load_string($Class['UsersFileXml']);
$Class['FileJson'] = json_encode($Class['FileXml']);
$Array = json_decode($Class['FileJson'],TRUE);
return $Array;
}
}
$xml = XML2Array::CreateArray($plik_xml);
/* echo '<pre>';
print_r($xml);
echo '</pre>';
*/
plik
p.xml<?xml version="1.0" encoding="UTF-8"?>
<glowny>
<wezel1>test</wezel1>
<wezel2>test2</wezel2>
<cos>napis ktory sie tu zalapal i dlatego nie widac tego co jest w "cos innego"<cosinnego>test3</cosinnego></cos>
</glowny>
Nie pokazuje węzła <cosinnego> tylko widzi tam string, jak zrobić, żeby pomijał jakikolwiek string jeśli występuje na początku jakiegoś węzła a nie jest w poprawnym formacie < i > ?
Tutaj np. skrypt zachowuje się prawidłowo i pomija nie chciany string:
<?xml version="1.0" encoding="UTF-8"?>
<glowny>
<wezel1>test</wezel1>
<wezel2>test2</wezel2>
<cos><cosinnego>test3</cosinnego>napis ktory sie tu zalapal i widac to co jest w "cos innego"<tezwidac>to tez widac</tezwidac></cos>
</glowny>
Ten post edytował wpaski 10.01.2015, 10:17:01