2012-12-03 58 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;你可能不得不根据自己的具体需求对它们进行修改,但这比从头开始编写自己的代码要容易得多,而且容易出错。