2016-01-19 12 views
9

私は送られているXMLフィードに悲しみがあります。私はそれが無効であることを知っていますが、送信プログラムの開発サイクルは、エラーを修正できるようになるのを待つ価値がないものです。だから私はそれを回避しようとしています。PHPを使ってXMLを読み込み、無効な属性エントリをマージ/ドロップして他のものを残す方法を探しています。PHPがXMLエラーを認識するようにする

XMLノードに重複した属性があるという欠点があります。私はsimpleXMLを使ってファイルを読み、有用な値に処理していますが、この行はシステムを完全に破壊します。問題のあるXMLは、XMLリーダーのC#の.MoveToNextAttribute()のPHPと同等である私が好き本当にだろうこの

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

のように見えます。私は重複した属性が提示されたときに爆破するだけではない何かを見つけることができないようです。

誰でもこれを手伝ってください。

答えはXML内の文字でアドレスエラーにリンクしています。例えば&は&として表示されません。ここでの問題は、XMLの構造がコンテンツではなく壊れていることです。私が解析しようとしているものですXML

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

を提示する場合、そのスレッドで答えが

parser error : Attribute attr1 redefined 

を返します。

あなたの入力クリーンアップするためにきちんと使うことができ
+0

あなたは([ 'XMLReader']持っていますかhttp://php.net/manual/enを/class.xmlreader.php)がインストールされていますか? – summea

+0

はい、確かに有効なXMLも必要になるでしょうか? – Khainestar

+2

[PHP - 無効なXMLを処理中]の複製があります(http://stackoverflow.com/questions/2890120/php-processing-invalid-xml) – fruggiero

答えて

1

<?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; 

の出力は以下となります。

<?xml version="1.0" encoding="utf-8"?> 
<open-1 attr1="atr1">Text</open-1> 
関連する問題