我正在创建一个项目以创建一个解析器,该解析器以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文档,以及针对这种规模的东西推荐的策略是什么?
您是否考虑过使用XSLT?它是一种基于XML的语言,用于将XML文档转换为其他格式,我认为它可以很好地适应这个问题。 –
@JaniHartikainen其中一个因素是它必须是HTML,然后才能用CSS进行样式化。这些HTML已成为旧版本的一部分,现在已经有了一些CSS,这些旧版本是用我用这个PHP版本取代的旧版C#解析器解析的。 我对XSLT并不熟悉,但似乎我最终会写出很多结构代码。 – gerobk