XML 컴파일 오류에 대한 오류 메시지 개선


14

마 젠토는 오류 표시와 관련하여 상당히 보호 적입니다. 개발자 모드가 활성화되면 (개발 중이어야 함) 응용 프로그램은 런타임 오류 피드백이 사용자에게 버블 링되도록합니다. 이 피드백은 쓸모가 없지만 XML 컴파일 오류의 경우 :

치명적인 오류 : '경고 : simplexml_load_string ()'메시지와 함께 '예외'예외가 발생했습니다. 엔티티 : 행 4 : 구문 분석기 오류 : [...] / lib / Varien / Simplexml / Config의 문서 시작시에만 XML 선언이 허용됩니다. 245 행의 [...] app / code / core / Mage / Core / functions.php의 510 행에있는 PHP

이는 구문 분석 할 수없는 문자열을 Varien_Simplexml_Config::loadFile()제시 ::loadString()함으로써 발생합니다.

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);
}

을 사용 libxml_use_internal_errors하는 것을 포함하여 몇 가지 잠재적 인 솔루션이 있지만 호출 방법은 $filePath매개 변수를 전달하지 않으므로 컨텍스트가 손실됩니다. 보다 명확한 예외를 던질 가능성이 있습니다.

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()
            )
        );
    }
}

이것은 적어도 다음과 같은 출력을 제공합니다.

치명적인 오류 : ' Varien_Simplexml_Config :: loadFile : 오류 구문 분석 [...] / app / code / local / Some / Example / etc / config.xml 메시지와 함께'Mage_Core_Exception '예외 가 발생했습니다 . 경고 : simplexml_load_string () : 엔티티 : 4 행 : 구문 분석기 오류 : XML 선언은 594 행의 [...] / app / Mage.php의 534 '행에있는 [...] / lib / Varien / Simplexml / Config.php의 문서 시작시에만 허용됩니다.

여기서 고려해야 할 몇 가지 장점 / 단점 / 대체 방법이 있습니까?


나는 이러한 나쁜 핵심 오류 메시지 중 일부를 개선하는 커뮤니티 모듈이 서사적이라고 생각합니다. 정말 나쁜 다른 오류 메시지는 주어진 phtml을 찾을 수 없을 때입니다.
kalenjordan

답변:


14

내가 항상 취하는 접근법은 간단한 원 라이너입니다.

find . -type f -name '*.xml' -exec xmllint --noout {} \;

그래도 libxml2-utils가 필요합니다 ...


1
wsi 파일에 오 탐지를 표시합니다.namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex

해결 방법 : find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(답변을 자유롭게 편집하십시오)
Alex

config.xml의 경우 : 난의 팬이야find . -type f -name 'config.xml' -exec xmllint --noout {} \;
benmarks

@ 알렉스 같은 오류가 발생합니다, 당신은 그 문제를 해결 했습니까?
Butterfly

내가 게시 한 회선을 사용해 보셨습니까?
Alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.