2012-12-03 59 views
0

我正在創建一個項目以創建一個解析器,該解析器以XML中存儲的教科書並將它們轉換爲使用PHP的HTML。這是用於在線教育服務。我花了大量時間研究PHP中XML解析器的選項。從我所看到的我相信我最好的選擇是使用DOMDocument或XMLReader(也許將它與SimpleXML混合使用)。使用PHP將大型複雜XML文檔轉換爲HTML

這些書籍被分成單獨的文件,如Front,Units,Chapters和Back。這是從外部來源提供的,所以我無法控制XML。這就是說我已經發現他們正在使用Syntext Serna Free來構建XML文檔。

所以這些書是按照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屬性。

Phew。好的,所以我的問題是......是否有人有一些知識或經驗可以共享來解析這種大小/複雜性的XML文檔,以及針對這種規模的東西推薦的策略是什麼?

+2

您是否考慮過使用XSLT?它是一種基於XML的語言,用於將XML文檔轉換爲其他格式,我認爲它可以很好地適應這個問題。 –

+0

@JaniHartikainen其中一個因素是它必須是HTML,然後才能用CSS進行樣式化。這些HTML已成爲舊版本的一部分,現在已經有了一些CSS,這些舊版本是用我用這個PHP版本取代的舊版C#解析器解析的。 我對XSLT並不熟悉,但似乎我最終會寫出很多結構代碼。 – gerobk

回答

0

我肯定會考慮Jani Hartikainen對XSLT的建議。 XSLT是一種基於XML的語言,用於編寫將任意XML文檔(如您正在處理的輸入)轉換爲其他格式的規則(稱爲「樣式表」,但它們不同於CSS樣式表),這些格式包括HTML(轉換爲HTML很常見,XSLT有一些專用於它的功能)。 PHP有一個內置的XSLT處理器。

這可能是教科書出版商已經有一些XSLT樣式表用於將教科書轉換爲HTML;你可能不得不根據自己的具體需求對它們進行修改,但這比從頭開始編寫自己的代碼要容易得多,而且容易出錯。