Magento cukup protektif (sebagaimana mestinya) mengenai tampilan kesalahan. Ketika mode pengembang diaktifkan (sebagaimana mestinya selama pengembangan), aplikasi memungkinkan umpan balik kesalahan runtime naik ke pengguna. Untuk kesalahan kompilasi XML meskipun umpan balik ini tidak berguna:
Kesalahan fatal: Pengecualian tanpa pengecualian 'Pengecualian' dengan pesan 'Peringatan: simplexml_load_string (): Entitas: baris 4: kesalahan parser: Deklarasi XML hanya diizinkan pada awal dokumen di [...] / lib / Varien / Simplexml / Config. php on line 510 'di [...] app / code / core / Mage / Core / functions.php on line 245
Ini hasil dari Varien_Simplexml_Config::loadFile()
penyajian ::loadString()
dengan string yang tidak dapat diuraikan:
public function loadFile($filePath)
{
if (!is_readable($filePath)) {
//throw new Exception('Can not read xml file '.$filePath);
return false;
}
$fileData = file_get_contents($filePath);
$fileData = $this->processFileData($fileData);
return $this->loadString($fileData, $this->_elementClass);
}
Ada beberapa solusi potensial, termasuk menggunakan libxml_use_internal_errors
, tetapi metode panggilan tidak mengkomunikasikan $filePath
param, sehingga konteksnya akan hilang. Satu kemungkinan adalah dengan melemparkan pengecualian yang lebih eksplisit:
public function loadFile($filePath)
{
if (!is_readable($filePath)) {
//throw new Exception('Can not read xml file '.$filePath);
return false;
}
$fileData = file_get_contents($filePath);
$fileData = $this->processFileData($fileData);
try{
return $this->loadString($fileData, $this->_elementClass);
}
catch (Exception $e){
Mage::throwException (
sprintf(
"%s: error parsing %s:\r\n%s",
__METHOD__,
$filePath,
$e->getMessage()
)
);
}
}
Ini setidaknya memberikan output seperti berikut:
Kesalahan fatal: Pengecualian tanpa tertangkap 'Mage_Core_Exception' dengan pesan ' Varien_Simplexml_Config :: loadFile: error parsing [...] / app / code / local / Some / Example / config.xml : Peringatan: simplexml_load_string (): Entity: line 4 : kesalahan parser: Deklarasi XML hanya diizinkan pada awal dokumen di [...] / lib / Varien / Simplexml / Config.php on line 534 'di [...] / app / Mage.php on line 594
Apakah ada beberapa keuntungan / kerugian / pendekatan alternatif untuk dipertimbangkan di sini?
sumber
Jawaban:
Pendekatan yang selalu saya ambil adalah one-liner sederhana:
diperlukan libxml2-utils ...
sumber
namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;
(jangan ragu untuk mengedit jawabannya)find . -type f -name 'config.xml' -exec xmllint --noout {} \;