내 PHP 앱은 다양한 XML 형식으로 내보내야합니다. XSLT 또는 기본 PHP를 사용해야합니까?

StackOverflow https://stackoverflow.com/questions/818679

  •  03-07-2019
  •  | 
  •  

문제

내 PHP 애플리케이션은 대부분 XML 기반의 다양한 데이터 형식으로 내보내거나 가져올 수 있어야합니다.

나는 옵션이있다

  • PHP에서 DOM을 사용하여 다른 데이터가 필요한 모든 데이터의 슈퍼 세트 인 일부 XML 기반 형식으로 내보내고 지원하려는 각 출력 형식에 대해 별도의 XSLT 스타일 시트를 생성하고 PHP의 XSL 확장을 통해 DOM 출력을 실행하십시오.

또는

  • PHP의 XSL 확장 기능을 사용하지 않고 각 출력 형식을 기본 PHP의 클래스로 구현하는 내부 개체/구조에서 DOM을 사용하여 주어진 XML 형식으로 직접 변환되므로 각각의 이러한 클래스는 동일한 인터페이스를 구현하여 서로 바꿀 수 있습니다.

이 앱은 대학에서 사용되며 다양한 방식으로 '사람들의 레코드를 관리하고 HR 시스템 등과 같은 다양한 소스에서 수입/수출하는 도구입니다. 입력 및 출력 형식 세트를 직접 구현하겠습니다. 앞으로 그것을 사용하는 사람이 자신의 형식을 지원하기 위해 수정하고 싶을 가능성이 있습니다.

내가 XSLT를 사용하지 않는 것을 고려하지 않는 한 가지 이유는 다른 사람이 나 이외의 다른 사람이 앱을 유지하려는 경우 XSLT를 아는 사람이 거의없는 것 같습니다. 더 많은 사람들이 PHP를 아는 것 같습니다.

다른 하나는 두 번째는 더 효율적이고 '프로그래밍 방식'솔루션처럼 보이며 CSV 또는 열 기반 텍스트와 같은 비 XML 형식으로 출력하고 가져올 수 있다는 점에서 더 유연하다는 것입니다. 수업의 필요한 부분은 종종 필요한 것이 아닙니다.

세 번째이지만 매우 작고 중요하지 않은 이유는 PHP가 XSL을 활성화하기 위해 다시 컴파일 해야하는 반면 DOM은 기본적으로 활성화되므로 약간 더 휴대가 가능하기 때문입니다. 그러나 PHP를 재구성하기 쉽기 때문에 이것은 문제가되지 않습니다.

내 추론에 대해 어떻게 생각하십니까?

도움이 되었습니까?

해결책

저의 개인적인 의견은 귀하의 결정이 의도 한 청중의 XSLT 지식을 어떻게 판단 해야하는지에 근거해야한다는 것입니다. XSLT가 어떻게 든 시스템과 함께 일 해야하는 사람들 (자신을 포함한) 중에서 "Terra incognita"라는 것이 분명하다면 XSLT-Solution을 배제 할 수 있습니다. XSLT를 배우기위한 노력과 노력은 XSLT 솔루션에서 얻을 수있는 장점 (특히 XML을 XML로 변환 할 때 특히 우아함 - 특히 XML을 XML로 변환 할 필요가 없음)을 무효화 할 것입니다.

아마도 양방향 솔루션이 옳은 일이 될 수 있습니다. XML 데이터 형식에 XSLT를 사용하는 가져 오기 및 내보내기를위한 어댑터 시스템을 구축 할 수 있으며 XML 기반이 아닌 모든 데이터 형식에 PHP 코드를 사용하는 기능을 제공 할 수 있습니다. 이렇게하면 모든 개발자가 자신이 더 편한 방식을 선택할 수 있습니다.

interface My_DataConverter_Interface
{
    /**
          * @param string                $file
          * @return My_DataObject
          */
    function import($file);

    /**
          * @param My_DataObject $data
          * @param string                $file
          */
    function export(My_DataObject $data, $file);
}

abstract class My_DataConverter_Xslt implements My_DataConverter_Interface
{ /* ... */ }

class My_DataConverter_XmlFormat1 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_XmlFormat2 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_Csv implements My_DataConverter_Interface
{ /* ... */ }

다른 팁

나는 당신의 추론이 건전하다고 생각하고 그것이 내가 갈 길입니다.

기본적으로 당신이 말하는 것은 Bridge/Adapter/Facade 클래스입니다. XSL 템플릿보다 (IMHO) 더 유연하고 이해하기 쉽습니다.

XSL 지원은 PHP 확장을 무너 뜨리는 것 이상을 포함하지 않기 때문에 세 번째 이유는 실제로 하나가 아닙니다.

또한 XML을 텍스트로 작성하는 대신 DOM 확장 (또는 동등한 라이브러리)을 통해이 작업을 수행하고 싶다는 것을 알게되어 기쁩니다.이 문제는 모든 탈출 문제를 소개하며 방해를 피할 것입니다.

개인적으로 나는 또한 XSL 템플릿이 바뀌기에 더 취약하다고 생각합니다 (대다수의 프로그래머에게 다소 비밀이기 때문에). 모든 템플릿을 변경합니다. 물론 코드로 도이 작업을 수행해야 할 수도 있지만 코드는 유지 관리하기가 더 쉽습니다.

흥미로운 문제.

두 솔루션 모두 효과가있을 것입니다. 그러나 나는 당신이 이것을 알고 있다고 생각합니다.

나는 아마도 코딩 된 솔루션을 직접 갈 것입니다. 그러나 그것은 아마도 XSLT와 관련하여 나에게 두통을주는 것과 관련이 있습니다.

XSLT에는 상승세가 있으며, 즉, 변경되지 않은 XML을 제공하는 사람들이 제작하도록 요청할 수 있습니다.

그것이 항상 당신이 그것들을 생산하려고한다면, 그것은 중요하지 않을 것입니다. 코딩 된 솔루션은 대부분의 시간을 유지하기가 더 쉬울 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top