私は最近、XML 名前空間と、それらを PHP で効果的に処理することに深刻な不満を抱いています。最悪の種類の犯人の例を次に示します。
<dc:type xsi:type="TypeName" xsi:identifier="NN">Others</dc:type>
preg_replace を使用して成功したのは、次を使用して (URL を壊さずに) タグの「名前空間を解除」することでした。
$xml = preg_replace(
'/<(\/?)([^:" ].*):([^>\/ ].*)(\/?)>/msiU',
'<$1$2_$3$4>',
$x->readOuterXML()
);
# <dc_type xsi:type="TypeName" xsi:identifier="NN">Others</dc_type>
私ができなかったのは、正規表現の魔法がなかったため、すべての名前空間属性を同じ形式に変換することでした。最初のオカレンスは変換できましたが、繰り返し可能な条件を設定する方法がわかりません。コードが機能しなかったため (そして何をしたか思い出せません)、コードを削除しましたが、結果は次のようになりました。
<dc_type xsi_type="TypeName" xsi:identifier="NN">Others</dc_type>
一方、美しいのはこれです:
<dc_type xsi_type="TypeName" xsi_identifier="NN">Others</dc_type>
助けてくれる正規表現マスターはいますか?