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

使用PHP将大型复杂XML文档转换为HTML,php,html,xml,parsing,Php,Html,Xml,Parsing,我正在做一个项目,创建一个解析器,它将教科书存储在XML中,并用PHP将它们转换为HTML。这是用于在线教育服务。我花了大量时间研究PHP中XML解析器的选项。从我所看到的情况来看,我相信我最好的选择是使用DOMDocument或XMLReader(可能是将其与SimpleXML混合使用) 这些书被分成不同的文件,如封面、单元、章节和背面。这是从外部源提供的,因此我无法控制XML。也就是说,我已经知道他们正在使用XML文档构建 因此,这些书以ISBN命名,文件格式为1234567890_ch01

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

这些书被分成不同的文件,如封面、单元、章节和背面。这是从外部源提供的,因此我无法控制XML。也就是说,我已经知道他们正在使用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文档?对于这种规模的XML文档,推荐的策略是什么?

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


可能是教科书出版商已经有了一些XSLT样式表,可以将教科书转换成HTML;您可能需要根据自己的具体需要对它们进行一些修改,但这比从头开始编写要容易得多,也不容易出错。

您考虑过使用XSLT吗?它是一种基于XML的语言,用于将XML文档转换为其他格式,我认为它可以很好地解决这个问题。@JaniHartikainen其中一个因素是它必须是HTML,然后可以使用CSS设置样式。这个HTML将作为一部分的页面上已经存在CSS,而旧的书籍是用旧的C#解析器解析的,我将用这个PHP版本替换它。我对XSLT不太熟悉,但似乎我最终会编写很多结构代码。