2012-12-03 3 views
0

저는 XML로 저장된 교과서를 PHP로 HTML로 변환하는 파서를 만드는 프로젝트를 진행하고 있습니다. 이것은 온라인 교육 서비스와 함께 사용하기위한 것입니다. 필자는 PHP에서 XML 파서의 옵션을 연구하는데 많은 시간을 보냈습니다. 내가 볼 수있는 것에서는 최상의 옵션이 DOMDocument 또는 XMLReader (아마도 SimpleXML과 혼합)를 사용하고 있다고 생각합니다.PHP를 사용하여 크고 복잡한 XML 문서를 HTML로 변환

책은 Front, Units, Chapters 및 Back으로 분리되어 있습니다. 이것은 외부 소스에서 제공되므로 XML을 제어 할 수 없습니다. 즉, XML 문서를 작성하는 데 Syntext Serna Free을 사용하고 있다는 것을 알았습니다.

그래서 책의 이름은 ISBN #이며 파일의 형식은 1234567890_ch01.xml입니다. 이것은 XML 문서의 예입니다. 실제 문서는 문서 당 700-1000 줄이고 교과서 당 약 25 개의 문서이므로 읽기 쉽도록 크게 압축됩니다.

<frontmatter id="1234567890_001_000003" page-num="i" filename="1234567890_001_fm01.xml" sourcefilename="prelims.pdf"> 
    <titleinfo id="1234567890_001_000004" page-num="i"> 
     <title id="1234567890_001_000005" page-num="i">I'm a Book Title</title> 
     <subtitle id="1234567890_001_000006" page-num="i">I'm a subtitle</subtitle> 
    </titleinfo> 
    <creditinfo id="1234567890_001_000007" page-num="i"> 
     <author id="1234567890_001_000008" page-num="i"> 
      <name><emph type="bold">Senior Author</emph> 
       <fname><emph type="bold">Bob</emph></fname> 
       <lname><emph type="bold">Loblaw</emph></lname> 
      </name> 
      <organizationname>District School Board</organizationname> 
     </author> 
     <author id="1234567890_001_000009" page-num="i"> 
      <name><emph type="bold">Authors</emph> 
       <fname><emph type="bold">Spongebob</emph></fname> 
       <lname><emph type="bold">Squarepants</emph></lname> 
      </name> 
      <organizationname>District School Board</organizationname> 
     </author> 
    </creditinfo> 
</frontmatter> 

그래서 레이아웃의 기본 개념입니다. 물론 톤이 많지만 본질적으로 상위 태그별로 정렬됩니다. 내 전략은 부모 태그의 목록을 만들고, SAX 파서를 사용하여이를 읽고, 사용하기 쉽도록 어린이를 SimpleXML 객체로 변환하는 것이라고 생각합니다. 기본적으로 동일한 XML 구조를 유지하면서 HTML 요소로 랩핑하고 XML 요소 이름을 클래스 또는 ID 이름으로 지정하고 XML 속성을 HTML 속성으로 직접 변환합니다.

피. 좋아, 그럼 내 질문은 ... 누군가가이 크기/복잡성의 XML 문서를 파싱하기 위해 공유 할 수있는 지식이나 경험을 갖고 있으며이 규모의 것에 권장되는 전략은 무엇인가?

+2

XSLT 사용을 고려 했습니까? XML 기반 언어로 XML 문서를 다른 형식으로 변환하는 데 사용됩니다.이 문제를이 문제에 잘 맞출 수 있다고 생각합니다. –

+0

@ JaniHartikainen 요소 중 하나는 CSS로 스타일을 지정할 수있는 HTML이어야한다는 것입니다. 이 HTML이 일부가 될 페이지에는 이미 존재하는 CSS가 있으며,이 PHP 버전으로 대체 될 구형 C# 파서로 구문 분석 된 오래된 책이 있습니다. 저는 XSLT에 익숙하지 않지만 많은 구조 코드를 작성하게 될 것 같습니다. – gerobk

답변

0

Jani Hartikainen의 XSLT 제안을 확실히 살펴볼 수 있습니다. XSLT는 임의의 XML 문서 (처리중인 입력 등)를 HTML을 비롯한 다른 형식으로 변환하는 규칙을 작성하기위한 XML 기반 언어입니다 ("스타일 시트"라고하지만 CSS 스타일 시트와 다릅니다) HTML은 매우 보편적이어서 XSLT에는 일부 기능이 있습니다. PHP에는 XSLT 프로세서가 내장되어 있습니다.

교과서 게시자가 이미 교과서를 HTML로 변환하기위한 일부 XSLT 스타일 시트를 가지고있을 수 있습니다. 당신은 아마 당신의 특정 요구를 위해 그것들을 약간 수정해야 할 것입니다. 그러나 그것은 당신 자신을 처음부터 작성하는 것보다 훨씬 쉽고 오류가 적습니다.

관련 문제