Je voudrais analyser un document XML en utilisant XMLReader. J'ai un commutateur de cas avec toutes les constantes. Cependant, si un Tag est à fermeture automatique, XMLReader ne lance que ELEMENT, pas ELEMENT et END_ELEMENT comme prévu.Détection des balises de fermeture automatique XML avec PHP XMLReader
La détection via la propriété de classe $ isEmptyElement ne fonctionne pas non plus car la balise possède des attributs.
Donc ma question: Comment détecter une balise XML à fermeture automatique avec XMLReader en PHP?
connexes, mais pas de solution: XmlReader - Self-closing element does not fire a EndElement event?
Exemple Noeud:
<mynode name="somenamestring" code="intstring" option="intstring3"/>
Mon code:
$xmlReader->open($url,NULL);
$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->setIndent(true);
$xmlWriter->setIndentString(' ');
while ($xmlReader->read()) {
switch ($xmlReader->nodeType) {
case 1: #element
$xmlWriter->startElement($xmlReader->name);
if ($xmlReader->hasAttributes) {
while ($xmlReader->moveToNextAttribute()) {
$xmlWriter->writeAttribute($xmlReader->name,$xmlReader->value);
}
}
if ($xmlReader->isEmptyElement) {
$xmlWriter->endElement();
}
break;
case 3: #text
$xmlWriter->text($xmlReader->value);
break;
case 4: #cdata
$xmlWriter->writeCData($xmlReader->value);
break;
case 14: #whitespace
break;
case 15: #end element
$xmlWriter->endElement();
break;
default:
print('[WARN] NodeType not in case-switch: '.(string)$xmlReader->nodeType."\n");
break;
}
}
Je serais heureux si tel était le cas, malheureusement pour moi, il retourne false pour le noeud suivant: fixez-vous des options lors de la création du lecteur? Cependant, $ hasValue est vrai mais ce n'est pas utile car il y a beaucoup de balises qui ne se referment pas sans valeur. –
Marco
Je veux dire que $ hasValue est faux bien sûr. – Marco
alors je dois faire une autre erreur. J'ai ajouté mon code, pourriez-vous regarder à travers? – Marco