使用PHP将大型复杂XML文档转换为HTML

时间:2012-12-03 19:35:58

标签: php html xml parsing

我正在开发一个项目来创建一个解析器,该解析器将教科书存储在XML中并使用PHP将它们转换为HTML。这适用于在线教育服务。我花了很多时间研究PHP中XML解析器的选项。从我所看到的,我相信我最好的选择是使用DOMDocument或XMLReader(可能将它与SimpleXML混合)。

这些书被分成单独的文件,如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属性。

呼。好的,所以我的问题是......是否有人可以分享一些知识或经验来解析这种大小/复杂性的XML文档,以及这种规模的推荐策略是什么?

1 个答案:

答案 0 :(得分:0)

我肯定会关注Jani Hartikainen对XSLT的建议。 XSLT是一种基于XML的语言,用于编写规则(称为“样式表”,但它们与CSS样式表不同),它将任意XML文档(例如您正在处理的输入)转换为其他格式,包括HTML(转换为HTML非常常见,以至于XSLT具有一些专用于它的功能。 PHP有一个内置的XSLT处理器。

可能是教科书出版商已经有了一些XSLT样式表,用于将教科书转换成HTML;你可能不得不根据自己的特定需求对它们进行一些修改,但这比从头开始编写自己更容易,更容易出错。