Návrh na XML parser pro Nette\Utils

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Jacík
Člen | 147
+
+3
-

Nette\Utils již má třídu pro práci s JSONem. Parsování XML (hlavně zpracování chyb) je u SimpleXML také otrava. Rád bych tedy v Nette\Utils viděl třídu i pro parsování XML. Sám používám něco takového:

class SimpleXMLParser extends Nette\Object
{

	public static function parse($xml)
	{
		$currentState = libxml_use_internal_errors(TRUE);
		$xml = simplexml_load_string($xml);

		if (!$xml) {
			$errors = libxml_get_errors();
			libxml_clear_errors();
			libxml_use_internal_errors($currentState);
			throw new SimpleXMLParserException('Error processing xml', $errors);
		}

		libxml_use_internal_errors($currentState);

		return $xml;
	}

}


class SimpleXMLParserException extends \Exception
{
	static private $levels = [
		LIBXML_ERR_WARNING => 'Warning: ',
		LIBXML_ERR_ERROR => 'Error: ',
		LIBXML_ERR_FATAL => 'Fatal: ',
	];

	/** @var array */
	private $errors;


	public function __construct($message = NULL, array $errors = [])
	{
		parent::__construct($message);
		$this->errors = $errors;
	}

	public function getErrors()
	{
		$errors = [];
		foreach ($this->errors as $error) {
			$errors[] = self::$levels[$error->level] . trim($error->message) .
				" on line {$error->line} column {$error->column}";
		}

		return $errors;
	}

}

Rád bych znal Vaše názory, připomínky, abych to mohl lépe zpracovat a poslat pull.

Tomáš Jacík
Člen | 147
+
0
-

Vážně nikdo?

Jan Tvrdík
Nette guru | 2595
+
-2
-

Xml už skoro nikdo nepoužívá =)

Jinak tohle používá Symfony
https://github.com/…lEncoder.php#…

Filip Procházka
Moderator | 4668
+
+10
-

@TomasJancik tak udělej extension. A než se zeptáš tak ne, mít tam jenom dvě třídy není vůbec nic divného.

Xml už skoro nikdo nepoužívá =)

@JanTvrdík to je hovadina :)

Tomáš Jacík
Člen | 147
+
+4
-

@JanTvrdík To řekni bankám a jiným institucím :D Za ten odkaz díky.

@FilipProcházka To bych sice mohl, ale raději bych to viděl právě v Nette\Utils aby to prospělo více lidem. Nenavrhuji to pro sebe, pro sebe to mám vyřešeno, chtěl bych udělat Nette o fous lepším nástrojem.

Šaman
Člen | 2665
+
0
-

Nette\Utils chápu tak, že obsahují pomocný kód nikoliv přímo pro programátory, ale hlavně pro ostatni třídy Nette. Takže pokud ten XML parser nebude potřeba pro ostatní části frameworku, pak je to ideální zveřejnit jako addon (nebo vlastně knihovna úplně nezávislá na Nette).

Tomáš Jacík
Člen | 147
+
0
-

@Šaman Ok, zkusím tedy extension.

yonix
Člen | 37
+
0
-

Za xml parser budu rad v jakejkolvwk pouzitelnej podobe dost casto spracuvam data z xml exportou a simplexml mi vyrobilo uz nejednu vrasku.

Jan Endel
Člen | 1016
+
+2
-

A zkoušeli jste Matcher ? Vždycky se mi s ním skvěle pracovalo pro tohleto. Btw u bank jsi za XML moc rád, většinou používaj svoje proprietární formáty které fakt nechceš pochopit.

Tomáš Jacík
Člen | 147
+
0
-

@JanEndel Matcher znám, ale na XML jsem to tedy použít nezkoušel. Budu muset vyzkoušet.

Casper
Člen | 253
+
+1
-

Již nějakou dobu používám tuhle implementaci, třeba bude vyhovovat i někomu dalšímu (@yonix, @TomášJacík, …). Výstupem je DomDocument, ne SimpleXmlElement, protože u něj se mi nepodařilo napsat ochranu proti útoku QuadraticBlowup, nicméně DomDocument lze snadno převést na SimpleXmlElement pomocí php funkce simplexml_import_dom.

yonix
Člen | 37
+
0
-

Ďakujem @Casper vyskúšam to