2016-01-19 5 views
9

Ich habe etwas Kummer mit einem XML-Feed, den ich gesendet habe. Ich weiß, dass es ungültig ist, aber der Entwicklungszyklus des sendenden Programms ist so, dass es sich nicht lohnt, darauf zu warten, dass sie den Fehler korrigieren können. Also suche ich nach einer Arbeit dafür, eine Möglichkeit, PHP dazu zu bringen, dass ich das XML lesen und die ungültigen Attributeinträge zusammenführen/löschen kann, während ich alle anderen beibehalten kann.PHP zur Bestätigung von XML-Fehlern veranlassen

Der Fehler besteht darin, dass ich doppelte Attribute auf einem XML-Knoten habe. Ich habe SimpleXML verwendet, um die Dateien zu lesen und sie zu nützlichen Werten zu verarbeiten, aber diese Zeile unterbricht das System einfach. Der fehlbare XML sieht wie folgt aus

<dCategory dec="1102" dup="45" dup="4576" loc="274" mov="31493" prf="23469" unq="240031" xxx="7861" /> 

Was würde ich wirklich die PHP-Äquivalent von C# 's .MoveToNextAttribute gefällt, ist() auf dem XML-Reader. Ich kann nichts finden, was nicht explodiert, wenn man das Duplikat-Attribut erhält.

Wer hilft dabei?

Die Antworten, die mit Adressfehlern in Zeichen im XML selbst verknüpft sind. z.B. & erscheint nicht als &. Das Problem hierbei ist, dass die Struktur des XML-Codes nicht den Inhalt, sondern den Inhalt enthält. Die Antwort in diesem Thread gibt

parser error : Attribute attr1 redefined 

wenn es mit dem XML präsentiert

<open-1 attr1="atr1" attr1="atr1">Text</open-1> 

das ist, was ich zu analysieren versuchen.

+0

Haben Sie [ 'XMLReader'] (http://php.net/manual/en /class.xmlreader.php) installiert? – summea

+0

Ja, habe ich, obwohl es sicher auch gültiges XML benötigen wird? – Khainestar

+2

Mögliches Duplikat von [PHP - Ungültige XML verarbeiten] (http://stackoverflow.com/questions/2890120/php-processing-invalid-xml) – fruggiero

Antwort

1

könnten Sie ordentlich benutzen, um Ihre Eingabe zu bereinigen:

<?php 

$buffer = '<?xml version="1.0" encoding="UTF-8"?><open-1 attr1="atr1" attr1="atr1">Text</open-1>'; 

$config = [ 
'indent' => true, 
'output-xml' => true, 
'input-xml' => true, 
]; 

$tidy = tidy_parse_string($buffer, $config, 'UTF8'); 
$tidy->cleanRepair(); 
echo $tidy; 

Will Ausgang:

<?xml version="1.0" encoding="utf-8"?> 
<open-1 attr1="atr1">Text</open-1> 
Verwandte Themen