【发布时间】:2012-12-03 19:35:58
【问题描述】:
我正在做一个项目来创建一个解析器,该解析器将存储在 XML 中的教科书转换为使用 PHP 的 HTML。这是用于在线教育服务。我花了很多时间研究 PHP 中的 XML 解析器选项。据我所知,我相信我最好的选择是使用 DOMDocument 或 XMLReader(也许将它与 SimpleXML 混合使用)。
这些书籍被分成单独的文件,分别为 Front、Units、Chapter 和 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 文档,对于这种规模的东西有什么推荐的策略?
【问题讨论】:
-
您考虑过使用 XSLT 吗?它是一种基于 XML 的语言,用于将 XML 文档转换为其他格式,我认为它可以很好地解决这个问题。
-
@JaniHartikainen 因素之一是它必须是可以使用 CSS 设置样式的 HTML。页面上已经存在 CSS,该 HTML 将成为其中的一部分,以及使用旧 C# 解析器解析的旧书籍,我将用这个 PHP 版本替换。我对 XSLT 不太熟悉,但似乎我最终会编写很多结构代码。